C# 自己定义 implicit和explicit转换
2016-03-03 12:56
567 查看
explicit 和 implicit 属于转换运算符,如用这两者能够让我们自己定义的类型支持相互交换
explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)
implicit 表示隐式转换,如从 B -> A 仅仅需直接赋值(A = B)
隐式转换能够让我们的代码看上去更美丽、更简洁易懂。所以最好多使用 implicit 运算符。只是。假设对象本身在转换时会损失一些信息(如精度)。那么我们仅仅能使用 explicit 运算符,以便在编译期就能警告客户调用
输出:
应用:
比方在实际操作中将一个对象A(或者一个实体)序列化成xml进行存储,那么能够在该对象A的类中定义一个explicit operator,来实现将符合要求的xml内容转换为对象或者实体。
当然也能够在对象A的类中定义一个函数来实现这个处理。只是这样有可能会多出一步,那就是当该函数不是静态函数时,须要先实例化该对象来调用对应的处理函数。
參考:
explicit keyword
implicit keyword
operator keyword
demo下载
explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)
implicit 表示隐式转换,如从 B -> A 仅仅需直接赋值(A = B)
隐式转换能够让我们的代码看上去更美丽、更简洁易懂。所以最好多使用 implicit 运算符。只是。假设对象本身在转换时会损失一些信息(如精度)。那么我们仅仅能使用 explicit 运算符,以便在编译期就能警告客户调用
namespace OperatorTest { /// <summary> /// 猪 /// </summary> public class Pig { public Pig(string name) { this.Name = name; } public string Name; //explicit keyword用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 //static explicit operator target_type { source_type identifier } //target_type 目标类型 //source_type 源类型 //identifier Something /*转换运算符将源类型转换为目标类型。源类型提供转换运算符。与隐式转换不同,必须通过强制转换的方式来调用显式转换运算符。 假设转换操作可能导致异常或丢失信息,则应将其标记为 explicit。这能够防止编译器无提示地调用可能产生无法预见后果的转换操作*/ public static implicit operator Pig(Monkey value) { Pig mk = new Pig(value.Name + ":猴子变猪!!"); return mk; } }
namespace OperatorTest { /// <summary> /// 猴子 /// </summary> public class Monkey { public Monkey(string name) { this.Name = name; } public string Name; //implicit keyword用于声明隐式的用户定义类型转换运算符。 //static implicit operator target_type { source_type identifier } public static explicit operator Monkey(Pig value) { Monkey mk = new Monkey(value.Name + ":猪变猴子! 。"); return mk; } }调用:
Monkey monkey = new Monkey("悟空"); //隐式转换 猴子变猪 Pig monkeyToPig = monkey; MessageBox.Show(monkeyToPig.Name); Pig pig = new Pig("八戒"); //显式转换 猪变猴子 Monkey pigToMonkey = (Monkey)pig; MessageBox.Show(pigToMonkey.Name);
输出:
应用:
比方在实际操作中将一个对象A(或者一个实体)序列化成xml进行存储,那么能够在该对象A的类中定义一个explicit operator,来实现将符合要求的xml内容转换为对象或者实体。
当然也能够在对象A的类中定义一个函数来实现这个处理。只是这样有可能会多出一步,那就是当该函数不是静态函数时,须要先实例化该对象来调用对应的处理函数。
參考:
explicit keyword
implicit keyword
operator keyword
demo下载
相关文章推荐
- C#开发之问题汇总-降低NetFramework版本后,没有报错,生成失败
- C#中DLL调用资料整理
- C# 多态性
- C#封装
- LINQ to Entities 不识别方法 xxx,此该方法无法转换为存储表达式
- WPF学习开发客户端软件-任务助手
- c#将正则截取到的数据保存到实体中
- 老蜗牛写采集:一个漂亮的客户端-几个C#平台下的Winform 皮肤控件
- C# 保护Excel文档
- C#编程实现QQ界面的方法
- C#更改tabControl选项卡颜色的方法
- C#隐藏主窗口的方法小结
- C#抓包
- C#中的转义字符
- C#笔试题
- C#进阶系列——WebApi 跨域问题解决方案:CORS
- C#中的占位符
- c#保存文件的一个自定义方法
- C#实现listview Group收缩扩展的方法
- C#_IO操作_查询指定文件夹下的每个子文件夹占空间的大小