C# 类型转换

程序员经常碰到的一个问题便是:如何正确的对类型实现转换。

在大部分情况下,当需要对FCL提供的类型进行转换时,都应该使用FCL提供的转换方法。

注: FCL 是 Framework Class Library 的缩写,即Framework类库。


这些转型方法包括:

  • 使用类型的转换运算符:隐式转换和显示转换(强制转换)。
  • 使用类型内置的Parse、TryParse,或者如ToString、ToDouble和ToDateTime等方法
  • 使用帮助类提供的方法: System.Convert类、System.BitConverter类
  • 使用CLR支持的转型 : 实际上就是基类和子类之间的相互转换
    class Program
    {
        static void Main(string[] args)
        {
            Ip ip = "192.168.0.96";  //这里其实就是字符串到类型Ip之间的一个隐式转换
            Console.WriteLine(ip.ToString());

            Animal animal;
            Dog dog = new Dog();
            animal = dog;       //隐式转化,因为Dog就是Animal。
            //dog = animal;     //编译不通过
            dog = (Dog)animal;  //必须存在一个显式转换

            int i = 0;
            float j = 0;
            j = i;  // int到float(Single)存在一个隐式转换
            i = (int) j; // float(Single)到int存在,而且必须存在一个显示转换

        }
    }

    class Ip
    {
        IPAddress value;

        public Ip(string ip)
        {
            value = IPAddress.Parse(ip);
        }
        public static implicit operator Ip(string ip)
        {
            Ip iptemp = new Ip(ip);
            return iptemp;
        }

        //用户自定义的类型也可以用过重载转换运算符的方式来提供这一类转换
        //这里便重载了ToString这个方法
        public override string ToString()
        {
            return value.ToString();
        }
    }

    /* 
     * 如果用户自定义的类型之间需要转换,建议从面向对象的角度进行考虑,
     * 因为它们一般都含有某种关系(如继承、实现等)
     */

    class Animal
    {

    }

    class Dog : Animal
    {

    }

    class Cat : Animal
    {

    }
    /*
     * 在进行子类向基类转型的时候支持隐式转换,但基类向子类转换时,必须是显示转换。
     */

读《改善C#程序的157个建议》笔记抄录。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值