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

关于C#内隐转换的访谈问题,c#,C#,我收到了一份示例声明: MyClass myclass = 3; 怎样才能使这句话有效呢?我需要在MyClass中包含哪些代码来支持从int隐式转换?您需要: 就我个人而言,大多数时候我都不是隐式转换的超级粉丝。有时它们是有用的,但是在将它们放入代码之前要仔细考虑。当您阅读代码时,它们可能会非常混乱 另一方面,如果仔细使用,它们会非常方便——我特别想到从string到XName和XNamespace在LINQ到XML中的转换。如果MyClass有一个从int的隐式转换,这是可能的 您需要重载隐

我收到了一份示例声明:

MyClass myclass = 3;
怎样才能使这句话有效呢?我需要在
MyClass
中包含哪些代码来支持从
int
隐式转换?

您需要:

就我个人而言,大多数时候我都不是隐式转换的超级粉丝。有时它们是有用的,但是在将它们放入代码之前要仔细考虑。当您阅读代码时,它们可能会非常混乱


另一方面,如果仔细使用,它们会非常方便——我特别想到从
string
XName
XNamespace
在LINQ到XML中的转换。

如果
MyClass
有一个从
int
的隐式转换,这是可能的


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

public static implicit operator MyClass (int rhs)
{ 
    MyClass c = new MyClass (rhs);
    return c;
}
以下是方法:

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

这使用了名为的C#特性。

只需实现一个转换运算符。

这实际上是一个很好的问题,需要编辑思考这与隐式键入有什么关系?你可能是指隐式转换,隐式转换最好在这里说如果这是一个面试问题,我想知道目的是什么。以这种方式使用隐式转换是对这个概念的严重滥用,很少有例外。当然,如果类是一个整数类或其他什么,那么隐式转换就很好了。但我会在每次代码评审中看到示例语句时立即将其标记出来。@Thorsten79我认为测试一个理论概念没有任何害处。问题是“如何使它成为一个有效的陈述”——仅此而已。这并不是说这是一个真实世界的例子。他们把课堂弄糊涂了。但是,当与不可变结构一致使用时,它实际上并不令人困惑,而是非常强大<代码>英尺英寸长度=“10\'-3/16”“是非常明显的,对于它是如何工作的,没有任何疑问的余地。@Michael:事实上是这样的。如果输入字符串为空,它会做什么?还是空的?还是垃圾?在每种情况下,它是抛出还是返回一个无意义的值?这些答案对于任何阅读代码的人来说都不明显,因此您可能不应该在那里使用隐式运算符。(当然,一个隐式操作符走相反的方向是不同的,但是现在已经有了
ToString()
。@Timwi我认为按照惯例,存在一致性的空间。我希望确保我的所有结构都具有未初始化状态
var feetAndInches=feetAndInches.Empty
。这也是默认值。不能将null赋值给结构,因此这不是问题。如果指定了空字符串变量或其他不可解析的字符串,则引发解析异常。如果您始终如一地这样做,就不会出现混乱,代码的可读性也会大大提高。
public class MyClass
{
    public static implicit operator MyClass(int i)
    {
        return new MyClass(i);
    }
}