标签:
类型转换不限于单一继承链中的类型(派生类转换为基类或者基类转换为派生类),完全不相关的类型之间也能进行转换。关键在于在两个类型之间提供转型操作符。
在下面这样的情况下应该定义显式转型操作符:
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(); } } }
上面的例子演示了为不同类之间转换定义显式和隐式操作符的情况。显示转化使用:explicit声明,在转换时使用括号进行强制类型转换,请求编译器相信程序员的选择,隐式类型转换用:implicit,而隐式类型转换直接可以用赋值表达式。
标签:
原文地址:http://www.cnblogs.com/crz2014/p/4333464.html