C#学习笔记-explicit关键字
来源:互联网 发布:如何删除知乎回答 编辑:程序博客网 时间:2024/05/17 19:18
explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。例如,在下面的示例中,此运算符将名为 Fahrenheit 的类转换为名为 Celsius 的类:
// Must be defined inside a class called Farenheit:public static explicit operator Celsius(Farenheit f){ return new Celsius((5.0f/9.0f)*(f.degrees-32));}
可以如下所示调用此转换运算符:
Farenheit f = new Farenheit(100.0f);Celsius c = (Celsius)f;
备注
转换运算符将源类型转换为目标类型。源类型提供转换运算符。与隐式转换不同,必须通过强制转换的方式来调用显式转换运算符。如果转换操作可能导致异常或丢失信息,则应将其标记为 explicit。这可以防止编译器无提示地调用可能产生无法预见后果的转换操作。
省略此强制转换将导致编译时错误编译器错误 CS0266。
有关更多信息,请参见使用转换运算符(C# 编程指南)。
示例
下面的示例提供 Fahrenheit 和 Celsius 类,它们中的每一个都为另一个提供显式转换运算符。
// cs_keyword_explicit_temp.csusing System;class Celsius{ public Celsius(float temp) { degrees = temp; } public static explicit operator Fahrenheit(Celsius c) { return new Fahrenheit((9.0f / 5.0f) * c.degrees + 32); } public float Degrees { get { return degrees; } } private float degrees;}class Fahrenheit{ public Fahrenheit(float temp) { degrees = temp; } public static explicit operator Celsius(Fahrenheit f) { return new Celsius((5.0f / 9.0f) * (f.degrees - 32)); } public float Degrees { get { return degrees; } } private float degrees;}class MainClass{ static void Main() { Fahrenheit f = new Fahrenheit(100.0f); Console.Write("{0} fahrenheit", f.Degrees); Celsius c = (Celsius)f; Console.Write(" = {0} celsius", c.Degrees); Fahrenheit f2 = (Fahrenheit)c; Console.WriteLine(" = {0} fahrenheit", f2.Degrees); }}
输出
100 fahrenheit = 37.77778 celsius = 100 fahrenheit
下面的示例定义一个结构 Digit,该结构表示单个十进制数字。定义了一个运算符,用于将 byte 转换为 Digit,但因为并非所有字节都可以转换为Digit,所以该转换是显式的。
// cs_keyword_explicit_2.csusing System;struct Digit{ byte value; public Digit(byte value) { if (value > 9) { throw new ArgumentException(); } this.value = value; } // Define explicit byte-to-Digit conversion operator: public static explicit operator Digit(byte b) { Digit d = new Digit(b); Console.WriteLine("conversion occurred"); return d; }}class MainClass{ static void Main() { try { byte b = 3; Digit d = (Digit)b; // explicit conversion } catch (Exception e) { Console.WriteLine("{0} Exception caught.", e); } }}
输出
conversion occurred
阅读全文
0 0
- C#学习笔记-explicit关键字
- C++学习笔记--explicit关键字
- C++的explicit关键字 学习笔记
- C++的explicit关键字 学习笔记
- explicit关键字学习
- explicit关键字学习
- C# explicit关键字的作用
- C++笔记之关键字explicit
- C# explicit implicit关键字、checked关键字
- C#学习笔记-abstract关键字
- C#学习笔记-struct关键字
- C#学习笔记-base关键字
- C#学习笔记-params关键字
- C#学习笔记-operator关键字
- C#学习笔记5——operator、explicit与implicit
- 【effective C++笔记】C++ 中explicit 关键字
- explicit 关键字
- Explicit 关键字
- Python常用库大全
- 解决TCP延迟应答(Delay ACK)问题的3个小Trick-(续:正规的做法)
- c++ map相关
- JQuery DataTable 使用教程
- SQL优化
- C#学习笔记-explicit关键字
- SSM整合 -- 在Eclipse怎么创建一个Maven项目
- spring 模板引擎
- QT-数据库操作(以MYSQL为例)
- 第一次使用Java写pat
- 继承,super,this关键字及构造器
- Android使用Java Mail发送邮件
- 利用fiddler将本地网页放到某个域下
- 修改自己git的别名