一位同事和我本人在讨论.NET中的转换时,他指出了四种转换类型的方法,起初我只能提出两种隐式和显式的方法,然后他指出了用户定义的转换并使用了帮助器类,因此我决定在http://msdn.microsoft.com/en-us/library/ms173105.aspx处查找它,而我却发现我做了很多WPF,并且经常使用IValueConverter接口。
我的问题开始于-IValueConverter不仅是具有帮助程序类的转换的示例(当然,在实现时)?然后,我感觉很好,用户定义的转换与使用帮助程序类的转换之间的真正区别是什么?如果您按照上述MSDN页面上的链接进行操作,则说明文档为sorda slim。与此类似的是转换运算符页面上的示例。
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#忍者可以阐明这个主题。最后一个想法是,我通常会尽量避免进行转换,除非在日常代码中确实有很好的理由(即解析电子表格),我倾向于将其视为代码味道,这被认为是最佳实践吗?
谢谢
最佳答案
这不是您问题的完整答案,但是该代码段覆盖了该类的“显式强制转换”,从方法签名来看,这并不是很直观。基本上,它将允许您执行以下操作:
int one = 1;
SampleClass x = (SampleClass)one;
常识认为强制转换应该失败,因为
int
不是SampleClass
,但是问题中的代码段起作用,并使强制转换成为可能。另一种补充方法是:
public static implicit operator SampleClass(int i)
请注意,此处的关键字是
implicit
而不是explicit
,并且此版本允许隐式转换,因此可以使用:int one = 1;
SampleClass x = one;
请注意,您不再需要指定强制类型转换。
关于c# - IValueConverter不仅是“使用帮助程序类进行转换”的示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11362604/