考虑以下代码示例:
为什么操作员在检查类型时是否考虑了显式操作符是否被覆盖?
public class Human {
public string Value { get; set;}
}
public class Car {
public static explicit operator Human (Car c) {
Human h = new Human();
h.Value = "Value from Car";
return h;
}
}
public class Program {
public static void Mani() {
Car c = new Car();
Human h = (Human)c;
Console.WriteLine("h.Value = {0}", h.Value);
Console.WriteLine(c is Human);
}
}
了,我提供了从汽车一个明确的投人力的可能性,但汽车和人的层次是没有关系的!上面的代码只是意味着“汽车可以转换为人类”
但是,如果您运行的片断,你会发现表达c is Human
计算结果为假的! I used to believe that the is operator is kinda expensive cause it attempts to do an actual cast可能会导致InvalidCastException
。如果操作员正在尝试施放,那么施放应该成功,因为有一个操作员逻辑应该执行施放!
“是”测试是什么?
是否测试分层“is-a”的关系?
是否测试变量类型“是否可以转换为”一个类型?
c是从来没有人型。 – VoodooChild 2010-06-02 09:01:32