implicit和explicit是一对转换操作符
Implicit关键字:用于声明隐式的用户定义类型转换运算符。它可以实现2个不同类的隐式转换 ,提高代码的可读性。
Explicit关键字:声明必须通过转换来调用的用户定义的类型转换运算符。不同于隐式转换。
1 public class People<T> 2 { 3 public string Name { get; set; } 4 public int Age { get; set; } 5 public T Data { get; set; } 6 7 public People(string name = "zhangsan", int age = 15) 8 { 9 this.Name = name; 10 this.Age = age; 11 } 12 13 public People() 14 { 15 16 } 17 18 public static implicit operator People<T>(int age) 19 { 20 return new People<T>(age: age); 21 } 22 public static implicit operator People<T>(string name) 23 { 24 return new People<T>(name: name); 25 } 26 public static implicit operator String(People<T> p) 27 { 28 return p.Name; 29 } 30 public static implicit operator int(People<T> p) 31 { 32 return p.Age; 33 } 34 public static explicit operator T(People<T> p) 35 { 36 return p.Data; 37 } 38 public static implicit operator People<T>(T t) 39 { 40 return new People<T>() { Data = t }; 41 } 42 43 }
使用:
1 static void Main(string[] args) 2 { 3 4 People<DateTime> p = new People<DateTime>(name: "zhangsan", age: 15); 5 int age = p; 6 string name = p; 7 People<DateTime> p2 = 16; 8 People<DateTime> p3 = "lisi"; 9 People<DateTime> p4 = DateTime.Now; 10 object data = (DateTime)p4; 11 12 Console.ReadKey(); 13 }
晕不晕~