博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 三个关键字operator搭配implicit和explicit的用法
阅读量:4880 次
发布时间:2019-06-11

本文共 1835 字,大约阅读时间需要 6 分钟。

implicit 关键字用于声明隐式的用户定义类型转换运算符。如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换。隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。 但是,因为隐式转换不需要程序员将一种类型显式强制转换为另一种类型,所以使用隐式转换时必须格外小心,以免出现意外结果。 一般情况下,隐式转换运算符应当从不引发异常并且从不丢失信息,以便可以在程序员不知晓的情况下安全使用它们。 如果转换运算符不能满足那些条件,则应将其标记为 explicit。

举个例子

1     class A : IDisposable 2     { 3         public A(float f) 4         { 5             p = f; 6         } 7  8         public float p { get; } 9 10         public static implicit operator A(float f)11         {12             return new A(f);13         }14 15         public static implicit operator float(A a)16         {17             return a.p;18         }19 20         public static explicit operator B(A a)21         {22             return new B(a.p * 2);23         }24 25 26 27         public void Dispose()28         {29         }30     }31 32     class B33     {34         public B(float f)35         {36             p = f;37         }38         public float p { get; }39 40         public static explicit operator A(B b)41         {42             return new A(b.p * 10f);43         }44 45     }

调用代码

1             A a = null; 2             a?.Dispose(); 3             //初始化构造函数 4             a = new A(100.12345f); 5             //把a对象赋值给f,其实这个时候float已经被重载运算了所以不会报错 6             float f = a; 7             //把30赋值给a2对象的时候,A类已被重载了 8             A a2 = 30; 9             Console.WriteLine( "f是:" + f + "\n");10             Console.WriteLine("a2.p是:" + a2.p + "\n");11             B b = (B)a;12             Console.WriteLine("b.p是:" + b.p + "\n");

 

 

得到的结果是

f是:100.1235

a2.p是:30

b.p是:200.2469

总结:连续介绍了三个关键字operator搭配implicit和explicit,重载运算,类型转换的过程当中都离不开static,explicit需要强制转换而implicit隐试转换类型。
---------------------
作者:鸿雁
来源:CSDN
原文:https://blog.csdn.net/w200221626/article/details/52413700
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/xushitairan/p/10930750.html

你可能感兴趣的文章
2017国家中心城市发展报告
查看>>
sqlalchemy相关知识
查看>>
Ubuntu下搜狗输入法乱码
查看>>
计算机网络●通信协议
查看>>
爬山算法和退火算法
查看>>
再次聊一聊promise settimeout asycn awiat执行顺序---js执行机制 EVENT LOOP
查看>>
C#中怎么生成和获取GUID
查看>>
在EditPlus里配置编译和运行java代码的方法
查看>>
gson所需jar包
查看>>
window+amp搭建步骤
查看>>
最干净的pyinstaller打包成exe应用程序方法
查看>>
Python中的数据类型
查看>>
讲给普通人听的分布式数据存储【转载】
查看>>
关于最短路
查看>>
Hbase记录-zookeeper部署
查看>>
Python pexpect出现错误‘module have no attribute "spawn" 解决办法
查看>>
vs2008 C# 怎么调试C++ dll[转]
查看>>
PHP的魔术方法
查看>>
警惕麦咖啡的"缓冲区溢出保护"引起的ASP.NET 中 System.OutOfMemoryException 的错误...
查看>>
optimizer_dynamic_sampling
查看>>