C#:我们什么时候应该使用显式而不是隐式的操作符覆盖?

时间:2015-04-20 12:22:26

标签: c# casting implicit explicit

我已经看过有关隐式和显式运算符的MSDN教程。 我做了一些测试,效果很好。

我知道它们之间的区别(语法上说),但我不知道使用它们的最佳方式。

我的问题可能是:“什么样的转换必须使用演员?”

现在,当结果为null时,我只是没有隐式隐式..

示例:

struct TypeRef
{
    // If TypeRef is constructed with a type, will reference the given type.
    // If TypeRef is constructed with a string, will be the result of 'Type.GetType(theString)' (if the type doesn't exist: null)
    public readonly Type TypeIfExists;

    // If TypeRef is constructed with a type, will be the result of theType.Name
    // If TypeRef is constructed with a string, will reference this string.
    public readonly string TypeName;

    // Can be constructed by a string or a Type.
    // Can be converted from a string or a Type implicitely and explicitely
    // Can be converted to a string implicitely and explicitely
    // Can be converted to a Type explicitely only
}

TypeRef tr1 = "SomeType";
TypeRef tr2 = typeof(SomeType);
TypeRef tr3 = "ThisTypeDoesntExist";
Type t1 = (Type)tr1;
Type t2 = (Type)tr3; // Will be null.
string s1 = (string)tr1;
string s2 = tr1;

谢谢:)


编辑:更清楚地问这个问题:p

1 个答案:

答案 0 :(得分:0)

我不认为有技术原因,更多的是" API"原因。

关于显性(强调我的)的MSDN文章:

  

explicit关键字声明用户定义的类型转换运算符   使用强制转换

调用必须

因此,如果您希望班级用户能够在没有演员的情况下进行转换,请不要明确表示。我猜有关于投射和可读性的争论。