1. 什么是“implicit”和“explicit”呢?
implicit:关键字是用来声明隐式的用户定义类型转换运算符。当然隐式转换可以通过不必要的类型转换来提高源代码的可读性。
explicit:关键字反之则用于显示转换用户自定义类型。
2. 用法:
implicit的用法:
实现Food类和Noodle类之间的相互转换(写出Food和Noodle的实现,让下面的代码不会抛出空异常)
static void Main(string[] args){
Noodle noodle=(Food)null;
noodle.Name="兰州拉面";
Console.WriteLine(noodle.Name);
}
定义食物类
public class Food{ }
定义面条类
public class Noodle{
//食物名称
public string Name{get;set;}
//将Food类隐式的转换为Noodle类
public static implicit operator Noodle(Food food){
return new Noodle();
}
}
explicit的用法:
实现显式和隐式之间的相互转换,如下:
static void Main(string[] args){
Console.WriteLine("======隐式转换======");
ImplicitAndExplicit model=1.25;
Console.WriteLine(model);
Console.WriteLine("======显式转换======");
ImplicitAndExplicit new_model = (double)model;
Console.WriteLine(new_model);
}
定义一个ImplicitAndExplicit类
class ImplicitAndExplicit{
private int member1;
private double member2;
//无参构造函数
public ImplicitAndExplicit(){
this.member1=0;
this.member2=0.0;
}
//有参构造函数
public ImplicitAndExplicit(double m){
double f;
f=3.28*m;
this.member1=(int)f;
this.member2=12*(f-this.member1);
}
//由一个double隐式构造一个ImplicitAndExplicit类
public static implicit operator ImplicitAndExplicit(double m){
return new ImplicitAndExplicit(m);
}
//由一个ImplicitAndExplicit显式返回一个double
public static explicit operator double(ImplicitAndExplicit m){
double f;
f=m.member2/12+(double)m.member1;
return (m/3.28);
}
//重写ToString方法
public override string ToString(){
return $"{member1}米和{member2}厘米";
}
}
总结:不管是implicit还是explicit关键字,都必须用static和operator关键字进行修饰。语法如下:
public static implicit/explicit operator xxxxx(){ ...... }
以上代码全是本人用手打上去的,如果有错误请指出哈。再见。
不求与人相比,但求超越自己,要哭就哭出激动的泪水,要笑就笑出成长的性格!