在类型转换时常会遇到隐式转换和显式转换。那我们自己定义的类型要怎样去定义隐式转换和显式转换?我们来看一段代码

public class Rational{private Int32 _inner_int = 0;public Rational(){}public Rational(Int32 num){this._inner_int = num;}public Int32 ToInt32() { return this._inner_int; }// Implicitly constructs and returns a Rational from an Int32 public static implicit operator Rational(Int32 num){return new Rational(num);}// Explicitly returns an Int32 from a Rational public static explicit operator Int32(Rational r){return r.ToInt32();}public override string ToString(){//return base.ToString();String s = String.Format("{0}", this._inner_int);return s;}}

測试代码

  class Program{static void Main(string[] args){Rational r1 = 10;          Console.WriteLine(r1);       Int32 i = r1;     Console.WriteLine(i);       Console.ReadLine();}}

这时编辑会报错,见下图

从提示能够看到,是由于Int32 i=r1时缺少了显式转换。如今我们加入显示转换,改动后的代码及输出结果例如以下:

结果正常输出为10.

那为什么会这样呢?究其原因是在Rational转换成 Int32时,指定了explicit(显式的),所以必需要指定转换类型Int32。假设将explicit换成implicit(隐式),原来的代码将能够正常执行。

改动后的Rational

 public class Rational{private Int32 _inner_int = 0;public Rational(){}public Rational(Int32 num){this._inner_int = num;}public Int32 ToInt32() { return this._inner_int; }// Implicitly constructs and returns a Rational from an Int32 public static implicit operator Rational(Int32 num){return new Rational(num);}// Explicitly returns an Int32 from a Rational public static <span style="color:#ff0000;">implicit</span> operator Int32(Rational r){return r.ToInt32();}public override string ToString(){//return base.ToString();String s = String.Format("{0}", this._inner_int);return s;}}

測试代码及输出结果

可见explicit和implicit影响着类型的显式转换和隐式转换。

事实上在Rational r1=10已经运行了隐式转换,相应的转换代码例如以下:

 // Implicitly constructs and returns a Rational from an Int32 public static implicit operator Rational(Int32 num){return new Rational(num);}

假设将implicit换成explicit,Rational r1=10也将会报错(能够自行測试)。

转载请注明出处:http://blog.csdn.net/xxdddail/article/details/38057563

C#之自己定义的implicit和explicit转换相关推荐

  1. C# 自定义 implicit和explicit转换

    explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换 explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A) ...

  2. 用implicit和explicit打通两种类型

    我们知道,在c#中,如果两个类型没有继承关系 ,是不能相互值赋的,但有两个关键字implicit和explicit,可以让 Date date = DateTime.Now这样的赋值成为可能. 注:c ...

  3. 无法将类型int隐式转换为string_Scala implicit 隐式转换安全驾驶指南

    这篇短文将结合实例对隐式转换的各种场景进行解释和总结,希望看完的人能够安全驶过隐式转换这个大坑. 隐式转换函数 隐式转换函数有两种作用场景. 1 转换为期望类型:就是指一旦编译器看到X,但需要Y,就会 ...

  4. implicit和explicit

    implicit 关键字用于声明隐式的用户定义类型转换运算符. static implicit operator target_type { source_type identifier } 参数 t ...

  5. IEEE754标准以及非常规划定义,double的二进制转换工具类

    IEEE754标准 ​ 今天我们要讨论的问题是在Java中:double pi = 3.14; 在内存中第10位上是0还是1? ​ 这个问题需要我们了解Java中double类型在内存中是如何存储的. ...

  6. PCL学习(4.5)——点云对象的两种定义方式的区别与转换

    创建与访问 第一种,是一种vector的赋值方式,将point数据push_back到pcl::PointXYZ类型的模板中. pcl::PointCloud<pcl::PointXYZ> ...

  7. C# 语言规范_版本5.0 (第10章 类)

    1. 类 类是一种数据结构,它可以包含数据成员(常量和字段).函数成员(方法.属性.事件.索引器.运算符.实例构造函数.静态构造函数和析构函数)以及嵌套类型.类类型支持继承,继承是一种机制,它使派生类 ...

  8. operator、explicit与implicit

    说这个之前先说下什么叫隐式转换和显示转换 1.所谓隐式转换,就是系统默认的转换,其本质是小存储容量数据类型自动转换为大存储容量数据类型. 例如:float f = 1.0: double d=f:这样 ...

  9. c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别...

    msdn参考:http://msdn.microsoft.com/zh-cn/library/s53ehcz3.aspx http://msdn.microsoft.com/zh-cn/library ...

最新文章

  1. linux 锁定重要文件 更改重要命令
  2. linux tar 参数 cvf xvf cvzf zxvf 区别
  3. Vmware Vsphere虚拟化技术:6.7新特性介绍
  4. ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
  5. ipython jupyter区别_ipython jupyter notebook中显示图像和数学公式实例
  6. NIOS II EDS NIOS II IDE 转载
  7. 【译】Input Method Manager (IMM):输入法管理器
  8. python处理pcap文件_[转载]Python读取pcap文件
  9. 怎样给div增加resize事件
  10. 关于路由器认证校园网的可行方案.md
  11. CactiEZ-优化操作
  12. android edge 去广告,edge浏览器怎么去广告? edge浏览器去广告插件adsafe的使用方法...
  13. 官方水晶报表 .NET 应用程序实例下载 (Visual Basic .NET)
  14. 出租分数 20作者 陈越单位 浙江大学
  15. Linux+MySQL+MyCat实现分库分表,通过MyCat数据库中间件实现分库分表配置实战
  16. JAVA中native方法(实现例子)
  17. 【Visual Studio Code】中文乱码问题
  18. android变身蓝牙键鼠,使用BluetoothHidDevice将安卓手机同时模拟成鼠标和键盘
  19. 阿里校园招聘前端面试
  20. 【whistle】Whistle 安装及使用

热门文章

  1. 深度报告解密华为汽车业务!布局三大领域,对标世界级Tier1
  2. 中国自动化学会平行智能专业委员会成立
  3. 如何跟机器人“抢”工作?专家:新的分工将形成
  4. 2021 年 7 月程序员工资统计,平均 15302 元
  5. 程序员的十大谎言,你中了几个? | 每日趣闻
  6. linux 集群配置ssh无密码访问
  7. HashFlare矿池退出BTC挖矿,Coingeek矿池继续增加BCH算力
  8. Docker 多容器编排Swarm(六)
  9. 6条可以成为更好程序员的建议
  10. C# 视频监控系列 序 [完]