我有以下代码:只有当变量类型是派生类时才起作用?
class Program
{
static void Main(string[] args)
{
Test test = new Test();
object objTest = test;
Console.WriteLine(test.GetType()); // Output: "OperatorOverload.Test"
Console.WriteLine(objTest.GetType()); // Output: "OperatorOverload.Test"
Console.WriteLine(test == null); // Output: "True"
Console.WriteLine(objTest == null); // Output: "False"
test.Equals(null); // Output: "Hi!"
objTest.Equals(null); // Output: "Hi!"
Console.ReadLine();
}
}
测试看起来是这样的:
class Test
{
public static bool operator ==(Test obj1, Test obj2)
{
return true;
}
public static bool operator !=(Test obj1, Test obj2)
{
return !(obj1 == obj2);
}
public override bool Equals(object obj)
{
Console.WriteLine("Hi!");
return true;
}
}
看来,运营商只有重载作品时,你处理的变量的类型是类运营商重载定义在。我可以看到为什么会是这样,因为我正在寻找一种安全的方式来检查对象是否等于null。
我的问题是:
不要重载运算仅当该变量的类型是运营商在定义的类工作(我的代码告诉我,是的,但我可能是犯了一个错误)?
以下代码是检查对象是否等于null的安全方法吗?
SomeClass obj = new SomeClass(); // may have overloaded operators
if ((object)obj == null)
{
// ...
}
退房的答案,我认为这是相关的:HTTP://计算器。 com/a/2186908/453056 – Kyle 2012-02-16 05:51:26