Csharp/C#教程:隐式地将generics转换回T分享


隐式地将generics转换回T

如果我写类MyGeneric这样的generics类是可以写一个隐式MyGeneric为类型T,所以我可以这样做:

 public class MyGeneric { ... } public class GenericProperties { public MyGeneric MyGenericString {get;set;} public void UseMyGeneric() { string sTest = MyGenericString; MyGenericString = "this is a test"; } } 

可以通过重载运算符来实现吗? 我知道如果我的class级不是通用的话可以做到……

嗯,是的,但是对于僵尸耶稣的爱,不要这样做。 这真的令人困惑。 我认为你有点误解了仿制药的目的。 它不习惯将类“转”为该类型,它曾经用于使该类型(MyGenericString)“了解”您想要的类型,用于各种目的(通常是那些基于集合的目的)。

是的,但不要过度,这往往会让人感到困惑。 我只会将它用于包装类型。

 class Wrapper { public T Value {get; private set;} public Wrapper(T val) {Value = val;} public static implicit operator T(Wrapper wrapper) {return wrapper.Value;} public static implicit operator Wrapper(T val) {return new Wrapper(val);} } var intWrapper = new Wrapper(7); var usingIt = 7 * intWrapper; //49 Wrapper someWrapper = 9; //woohoo 

正如其他人所说,这是合法危险的 。 你可能陷入许多陷阱。 例如,假设您在C和T之间定义了一个用户定义的转换运算符。那么你说

 C c = new C("hello"); object o = (object) c; 

怎么了? 您的用户定义转换是否运行? 不,因为c已经是一个对象。

就像我说的那样,当你尝试定义generics转换运算符时,你会遇到一些疯狂的情况; 除非您对规范的第10.10.3节有深入而详细的了解,否则不要这样做。

是的,可以使用隐式转换运算符重载

上述就是C#学习教程:隐式地将generics转换回T分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 class Program { static void Main(string[] args) { myclass a = new myclass(); a.inner = "Hello"; string b = a; Console.WriteLine(b); } } class myclass { public T inner; public myclass() { } public static implicit operator T(myclass arg1) { return arg1.inner; } } 

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

ctvol管理联系方式QQ:251552304

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

(0)
上一篇 2022年1月5日
下一篇 2022年1月5日

精彩推荐