悬赏园豆:20
[已关闭问题]
关闭于 2008-08-01 16:00
我想重载一个类的隐式转换运算符<br><div class="cnblogs_code"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="/Images/OutliningIndicators/None.gif" align="top"><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">implicit</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">operator</span><span style="color: rgb(0, 0, 0);"> MyClass</span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 0);">T</span><span style="color: rgb(0, 0, 0);">></span><span style="color: rgb(0, 0, 0);">(T value)</span></div>这是格式<br>但是每次进行类型转换,都会创建新的MyClass对象,这可不是我想要的,而C#中又不允许重载赋值运算符<br>请问各位博友,有没办法在执行一个<br><div class="cnblogs_code"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><img src="/Images/OutliningIndicators/None.gif" align="top"><span style="color: rgb(0, 0, 0);">MyClass</span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">></span><span style="color: rgb(0, 0, 0);"> str </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> MyClass</span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 255);">string</span><span style="color: rgb(0, 0, 0);">></span><span style="color: rgb(0, 0, 0);">();<br><img src="/Images/OutliningIndicators/None.gif" align="top">str </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">Hello World!</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;</span></div>的时候,str<b>不会</b>被重新创建呢?根据str.GetHashCode()来看,现在是会被创建新的对象。<br>
问题补充:
MyClass<string> str = new MyClass<string>();
str = "Hello World!";
这样赋值是为了让它“看起来”是可以直接赋值的,但是我只能想到通过重载隐式类型转换运算符的方法来实现,这会产生新对象。
不过我又突然有了新的想法,就是重写GetHashCode和Equal方法,让他“看起来”像是同一个对象的引用。
不知道这种方法可不可以了。