implicit 关键字
用于声明隐式的用户定义类型转换运算符。它可以实现2个不同类的隐式转换 ,提高代码的可读性。但是需要注意使用隐式转换操作符之后,在编译时会跳过异常检查,所以隐式转换运算符应当从不引发异常并且从不丢失信息,否则在运行时会出现一些意想不到的问题。
案例1如下:
class Program{static void Main(string[] args){MyBool myBool = new MyBool();myBool.Init();if (myBool){Console.WriteLine("true");}else{Console.WriteLine("false");}Console.ReadKey(); }public class MyBool {public bool isExist = false;public void Init(){isExist = true;}public void Dispose(){isExist = false;}public static implicit operator bool(MyBool myBool){if (myBool == null)return false;return myBool.isExist;}}}
图中定义一个类MyBool
并在类中使用了implicit关键字讲将MyBool转换成bool
这样在判断类是否为空的时候可以使用if(MyBool)的方式
并且可以在隐式转换函数中添加自己的条件
比如图中加入了isExist的布尔变量,Init的时候设置true,Dispose设置为false
这样在if(MyBool)的时候 就可以知道该对象有没有调用过Init的函数了
既减少了代码量也可以保证对象能够使用
案例2如下:
class Program
{static void Main(string[] args){OtherClass otherClass = new OtherClass();otherClass.value = 1.5f;MyClass myClass = otherClass;Console.WriteLine(myClass.value);Console.ReadKey();}public class MyClass{public int value;public static implicit operator MyClass(OtherClass otherClass){MyClass myClass = new MyClass();myClass.value = (int)Math.Round(otherClass.value);return myClass;}public static implicit operator OtherClass(MyClass myClass){OtherClass otherClass = new OtherClass();otherClass.value = myClass.value;return otherClass;}}public class OtherClass{public float value;}
}
图中定义了MyClass和OtherClass 并且使用了关键字讲两个类互相进行了隐式转换,这样 假如我们把OtherClass 看成别人的类库里面的类 那样假如 我们要封装别人的类的话 除了继承外 还可以使用这种方式 ,这样优化代码量 并且继承的方式 可能会造成你这个类中有很多函数用不到而浪费 而这样写 可以自己封装一下你要用到的函数等
implicit 关键字相关推荐
- scala implicit 关键字用法总结
综述 implicit 关键字是scala中一个比较有特点的关键字,他保证了scala在很多时候没有一些不必要的代码冗余,使得scala在很多时候看起来更加简洁,同时使得scala的一些库在设计的时候 ...
- C# implicit关键字的用法
implicit 关键字用于声明隐式的用户定义类型转换运算符.如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换.隐式转换可以通过消除不必要的类型转换来提高 ...
- scala 隐式详解(implicit关键字)
掌握implicit的用法是阅读spark源码的基础,也是学习scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用函数 1.隐式参数 当我们在定义方法时,可以把 ...
- .net转换关键字:operator、explicit与implicit
operator.explicit与implicit 很少用到,但也不能不知道,发现这篇写很好,转一篇 operator operator 关键字用于在类或结构声明中声明运算符.运算符声明可以采用下列 ...
- C# 隐式转换关键字 implicit
implicit 关键字用于声明隐式的用户定义类型转换运算符. 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 引用摘自:implicit(C# 参考 ...
- C# 自定义 implicit和explicit转换
explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换 explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A) ...
- 不忘本~explicit和implicit修饰符
返回目录 部分内容来自MSDN implicit 关键字用于声明隐式的用户定义类型转换运算符.如果转换过程可以确保不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 1 cl ...
- C#中的Explicit和Implicit了解一下吧
今天在研究公司项目框架的时候看到了下面的用法,public static implicit operator JsonData(int data);.貌似很久没用过这种隐式转换的写法了,因此重新温习一 ...
- 无法将类型int隐式转换为string_Scala implicit 隐式转换安全驾驶指南
这篇短文将结合实例对隐式转换的各种场景进行解释和总结,希望看完的人能够安全驶过隐式转换这个大坑. 隐式转换函数 隐式转换函数有两种作用场景. 1 转换为期望类型:就是指一旦编译器看到X,但需要Y,就会 ...
最新文章
- iOS LLDB调试命令(Low Lever Debug)
- css/js压缩工具
- linux学习笔记-第一课-linux的历史,安装linux,远程连接
- 脐带血要不要保存?看了你就明白!
- 灰度图像--图像增强 非锐化掩蔽 (Unsharpening Mask) .
- ​KDD 2019 | 用户视角看世界:腾讯提出ConcepT概念挖掘系统,助力推荐搜索
- antd vue表单上传文件_vue+axios+antD的上传图片踩坑
- Quick BI v3.0版本全新起航——2018杭州云栖大会
- jacascript 立即执行函数(IIFE)与闭包
- 我和计算机比本领教案反思,《比本领》教学设计及反思
- python输入多组数据_Python3算法类多组数据输入输出格式
- 多线程模拟渡河 C语言 Linux
- Dev C++下载简介和安装
- 鲨鱼游戏/游戏测试实习面试
- 【牛客】3002 G-eli和字符串
- oracle的跨会话变量,oracle 回话环境变量 userenv ,oracle connetion context 会话环境 连接的会话环境...
- 3d视觉效果html,jQuery炫酷网页3D背景视觉差特效
- 硬件工程师--医疗器械
- 苹果开发者账号申请流程说明
- 如果使用PostGIS的ST_Area函数计算多边形面积
热门文章
- 弘辽科技:新品直通车要开人群吗?有什么优势吗?
- 重装系统后桌面只有一个回收站的解决方法
- linux手术后10年,正颌手术10年后遗症严重吗?
- 8. fastApi请求错误处理方式与示例
- AWS 中文入门开发教学 36- 连接MySQL - MySQL客户端工具
- 一天一道简单题目(2)
- 什么发行版的linux占资源较小,适合在任何地方使用的 Linux:15 个小型 Linux 发行版...
- 电脑配置,电脑购买必看,保姆级
- 【笔记】【Informatica】Informatica 资料库迁移步骤
- 数据结构 栈-链栈及基本操作