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

Mik*_*ike 14 c#

我收到了一份样本声明:

MyClass myclass = 3;
Run Code Online (Sandbox Code Playgroud)

怎么可能使这个有效的声明?我需要包含哪些代码MyClass来支持隐式转换int

Jon*_*eet 19

您需要一个隐式转换运算符:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

在另一方面,若有所思地使用时,它们可以是令人惊讶的方便-我是从思维转换特别是stringXNameXNamespaceLINQ to XML中.


Ant*_*lev 6

这是如何做:

public class MyClass
{
    public static implicit operator MyClass(int i)
    {
        return new MyClass(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

这使用C#功能称为隐式转换运算符.