C#用户定义类型转换
- 用于自定义类和结构能够进行隐式转换和显示转换.例如:将一个自定义类类型转换成整型,浮点型等,反之亦然.
C#提供隐式转换和显式转换
- 隐式转换:编译器自动执行转换
- 显式转换:编译器只在使用显式转换运算符时才执行转换
声明隐式转换的语法如下.注:所有用户定义转换必须使用public和static修饰符
public static implicit operator TargetType(SourceType Identifier) { ... return ObjectOfTargetType; }
TargetType:目标类型
参数Identitfier:源数据
例如,下面代码使一个int字面量被隐式转换为LimitedInt对象,反过来LimitedInt也可以隐式转换成一个int
class LimitedInt { const int MaxValue = 100; const int MinValue = 0; private int _theValue = 0; // 属性 public int TheValue { get { return _theValue; } set { if (value < MinValue) { _theValue = 0; } else { _theValue = value > MaxValue ? MaxValue : value; } } } // 隐式转换:将LimitedInt对象转为整型 public static implicit operator int(LimitedInt li) { return li.TheValue; } // 隐式转换:将整型转换为LimitedInt对象 public static implicit operator LimitedInt( int x) { LimitedInt li = new LimitedInt(); li.TheValue = x; return li; } } class Program { static void Main( string[] args) { LimitedInt li = 500; // 将500转换为LimitedInt int value = li; // 将LimitedInt转换为int Console.WriteLine( " li:{0},value:{1} ", li.TheValue, value); Console.ReadKey(); }
改代码输出结果:li:100,value:100
显示转换和强制转换运算符
前面所讲的都是隐式转换,如果你把运算符implcit改为explicit,你将不得不在实行转换时显示使用转换运算符
代码片段如下:
//显示 转换:将LimitedInt对象转为整型 public static explicit operator int(LimitedInt li) { return li.TheValue; } //显示 转换:将整型转换为LimitedInt对象 public static explicit operator LimitedInt( int x) { LimitedInt li = new LimitedInt(); li.TheValue = x; return li; } static void Main( string[] args) { LimitedInt li = (LimitedInt) 500; // 将500强制转换为LimitedInt int value = ( int)li; // 将LimitedInt强制转换为int Console.WriteLine( " li:{0},value:{1} ", li.TheValue, value); Console.ReadKey(); }