关于C#隐式转换的访谈问题

时间:2010-08-11 11:39:51

标签: c#

我收到了一份样本声明:

MyClass myclass = 3;

如何才能将此作为有效声明?我需要在MyClass中包含哪些代码才能支持int的隐式转换?

5 个答案:

答案 0 :(得分:19)

您需要implicit conversion operator

public class MyClass
{
    private readonly int value;
    public MyClass(int value)
    {
        this.value = value;
    }

    public static implicit operator MyClass(int value)
    {
        return new MyClass(value);
    }
}

就我个人而言,大部分时间我并不是隐性转换的忠实粉丝。偶尔它们很有用,但在将它们放入代码之前要仔细考虑。当你阅读代码时,它们会非常混乱。

另一方面,在仔细使用时,它们可以非常方便 - 我特别考虑从LINQ到XML的stringXNameXNamespace的转换。 / p>

答案 1 :(得分:6)

以下是:

public class MyClass
{
    public static implicit operator MyClass(int i)
    {
        return new MyClass(i);
    }
}

这使用名为implicit conversion operator的C#功能。

答案 2 :(得分:0)

如果MyClass具有int的隐式转化,则可能会发生。

Using Conversion Operators

答案 3 :(得分:0)

只需实施implicit转换运算符。

答案 4 :(得分:-1)

您需要重载隐式构造函数运算符:

public static implicit operator MyClass (int rhs)
{ 
    MyClass c = new MyClass (rhs);
    return c;
}