C#定义自定义类型转换

  类型转换不限于单一继承链中的类型(派生类转换为基类或者基类转换为派生类),完全不相关的类型之间也能进行转换。关键在于在两个类型之间提供转型操作符。

下面这样的情况下应该定义显式转型操作符:

  1. 在转型有可能失败时,开发者应该定义显式转型操作符。,例如:从long转换为int,这样可以提醒别人只有在确信转型会成功的时候才执行这样的转型,否则,就准备好在失败的时候捕捉异常。
  2. 执行有损转换的时候,开发者也应该优先使用显式转型。例如:将float转型为int
    
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Project5_42
    {
        class Program
        {
            static void Main(string[] args)
            {
                Sheep sheep = new Sheep();
                Volf volf = new Volf();
                sheep.say();
                sheep = (Sheep)volf;
                sheep.say();
                volf.say();
                volf = sheep;
                volf.say();
            }
        }
        class Sheep
        {
            public void say()
            {
                Console.WriteLine("I am a sheep");
            }
            //使用implicit声明为隐式类型转换
            public static implicit operator Volf(Sheep sheep)
            {
                Console.WriteLine("I turned to a volf from a sheep");
                return new Volf();
            }
        }
        class Volf
        {
            public void say()
            {
                Console.WriteLine("I am a volf");
            }
            //使用explicit声明为显式类型转换
            public static explicit operator Sheep(Volf volf)
            {
                Console.WriteLine("I turned to a sheep from a volf");
                return new Sheep();
            }
        }
       
    }
    View Code
    
    

    上面的例子演示了为不同类之间转换定义显式和隐式操作符的情况。显示转化使用:explicit声明,在转换时使用括号进行强制类型转换,请求编译器相信程序员的选择,隐式类型转换用:implicit,而隐式类型转换直接可以用赋值表达式。

posted @ 2015-03-12 21:00  北风Z  阅读(552)  评论(0编辑  收藏  举报