2

一位同事和我在讨论 .NET 中的转换时指出,有四种方法可以转换类型,起初我只能想出两种,隐式和显式,然后他指出用户定义的转换和使用辅助类,所以我决定在这里查看http://msdn.microsoft.com/en-us/library/ms173105.aspx读到我突然意识到我做了很多 WPF 并且经常使用 IValueConverter 接口。

我的问题开始于 - IValueConverter 不只是使用辅助类进行转换的一个示例(当然,当你实现它时)?然后我很好,用户定义的转换和使用辅助类的转换之间的真正区别是什么?如果您按照上面提到的 MSDN 页面中的链接进行操作,那么文档会很精简。就像这是转换运算符页面中的示例。

class SampleClass
{
    public static explicit operator SampleClass(int i)
    {
        SampleClass temp = new SampleClass();
        // code to convert from int to SampleClass...

        return temp;
    }
}

它并没有说得那么清楚。对我来说,它看起来像一个静态类,需要在 ctor 中添加一个 int?

无论如何 - 希望一些 C# ninja 可以阐明这个主题。最后一个想法是,我通常会尽量避免转换内容,除非在常规日常代码中有真正的充分理由(即解析电子表格),我倾向于将其视为代码异味,这被认为是最佳实践吗?

谢谢

4

1 回答 1

2

这不是您问题的完整答案,但是该代码片段覆盖了该类的“显式转换,这不是真正直观的方法签名。基本上它可以让你做:

int one = 1;
SampleClass x = (SampleClass)one;

常识说演员应该失败,因为并且int不是,SampleClass而是你问题中的代码片段开始发挥作用,并使演员成为可能。

另一种补充方法是:

public static implicit operator SampleClass(int i)

注意这里的关键字是implicit代替explicit,这个版本将允许隐式转换,所以这会起作用:

int one = 1;
SampleClass x = one;

请注意,您不再需要指定演员表。

于 2012-07-06T13:03:22.107 回答