Csharp/C#教程:为什么我不能定义隐式和显式运算符?分享


为什么我不能定义隐式和显式运算符?

为什么我不能像这样定义隐式和显式运算符?

public class C { public static implicit operator string(C c) { return "implicit"; } public static explicit operator string(C c) { return "explicit"; } } 

你可以这样做虽然:)

  class Program { public class A { } public class B { public static implicit operator A(B b) { Console.WriteLine("implicit"); return new A(); } } public class C : B { public static explicit operator A(C c) { Console.WriteLine("explicit"); return new A(); } } static void Main(string[] args) { C c = new C(); A a = c; A b = (A) c; } } 

这打印:

 implicit explicit 

检查一下: 为什么不能在C#中共存相同类型的隐式和显式运算符?

如果您定义一个显式运算符,您将能够执行以下操作:

 Thing thing = (Thing)"value"; 

如果您定义了隐式运算符,您仍然可以执行上述操作,但您也可以利用隐式转换:

 Thing thing = "value"; 

简而言之,explicit只允许显式转换,而implicit允许显式和隐式……因此你只能定义一个。

我不知道阻止这种情况的技术限制,但我认为他们会这样做是为了防止人们自己开枪。

 string imp = new C(); // = "implicit" string exp = (string)new C(); // = "explicit" 

这会让我感到疯狂,没有任何意义, C只应该以一种方式投射到一个字符串,而不是两种不同的方式。

上述就是C#学习教程:为什么我不能定义隐式和显式运算符?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1003909.html

(0)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐