当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

C#中的转换关键字:explicit、implicit与operator

秋天2年前 (2022-05-09)C#/.net框架656

 

这个3个关键字貌似不是很常用。C#语法跟Java很接近,但是在Java里面也没有这些关键字。我在网上搜罗了一些资料,希望能够帮助我们更好的理解这些关键字。

MSDN资料:http://msdn.microsoft.com/zh-cn/library/39bb81c3.aspx

首先,explicit和implicit关键字分别表示显式的类型转换和隐式的类型转换。

explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换。
explicit 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)
implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)
隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端。

其次,operator 关键字用于在类或结构声明中声明运算符。

经典用法:

C#
struct Currency{public uint Dollors;public ushort Cents;public Currency(uint dollors, ushort cents){this.Dollors = dollors;this.Cents = cents;}public override string ToString(){return string.Format("${0}.{1,-2:00}", Dollors, Cents) ;}public static string GetCurrencyUnit(){return "Dollars";}public static explicit operator Currency(float value){checked{uint dollars=(uint)value;ushort cents = (ushort)((value - dollars) * 100);return new Currency(dollars,cents);}}public static implicit operator float (Currency value){return value.Dollors+(value.Cents/100.0f);}public static implicit operator Currency(uint value){return new Currency(value,0);}public static implicit operator uint(Currency value){return value.Dollors;}}

其他参考文档:http://www.cnblogs.com/hunts/archive/2007/01/17/operator_explicit_implicit.html

#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。

扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=133

标签: .NET.NET框架
分享给朋友:

“C#中的转换关键字:explicit、implicit与operator” 的相关文章

C# 控件闪烁问题的解决

C# 控件闪烁问题的解决

说一下解决C#下控件闪烁的几个问题,如下:  listview和datagridview显示数据闪烁 自定义控件的显示闪烁listbox滚动条拖动闪烁面板中控件过多的闪烁propertyGrid点击和修改项目缓慢的问题richtextbox控件的刷新显示问题此类问题对于界面复杂规...

计算代码执行时间,可以精确到十亿分之一秒

计算代码执行时间,可以精确到十亿分之一秒

注:.Net的Stopwatch类可以精确到1/10000毫秒, 有没有更精确的计时吗?见下面的代码。暂时没试过效果,大家可以试下。计算某个代码片段的执行时间,精确到CPU执行一条指令所用的时间(十亿分之一秒),可用于精确计算某个算法的执行时间。 代码:C#using Syste...

索引器(C# 编程指南)

索引器(C# 编程指南)

 索引器允许类或结构的实例就像数组一样进行索引。 无需显式指定类型或实例成员,即可设置或检索索引值。 索引器类似于属性,不同之处在于它们的访问器需要使用参数。以下示例定义了一个泛型类,其中包含用于赋值和检索值的简单 get 和 set 访问器方法。&...

C# 查询运算符测试

C# 查询运算符测试

测试一下全部的查询运算符。每天测试一部分,代码会持续更新中……C#using System;using System.Collections;using System.Collections.Generic;using System.Linq;using&nb...

.NET(C#) TPL:Task中未觉察异常和TaskScheduler.UnobservedTaskException事件

.NET(C#) TPL:Task中未觉察异常和TaskScheduler.UnobservedTaskException事件

当你在一个Task执行中抛出异常,比如:C#Task.Factory.StartNew(() =>{    throw new Exception();});运行该方法,没有任何异常抛出。事实上此时Task的异常处于未觉察状...

细说进程、应用程序域与上下文之间的关系(三)—— 深入了解.NET上下文

细说进程、应用程序域与上下文之间的关系(三)—— 深入了解.NET上下文

目录一、进程的概念与作用二、应用程序域三、深入了解.NET上下文四、进程应用程序域与线程的关系三、深入了解.NET上下文3.1 .NET上下文的概念应用程序域是进程中承载程序集的逻辑分区,在应用程序域当中,存在更细粒度的用于承载.NET对象的实体,那就.NET上下文Context。所有的.NET对象...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。