【发布时间】:2012-02-16 05:46:37
【问题描述】:
我有以下代码:
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)
{
// ...
}
【问题讨论】:
-
在这里查看答案,我认为它是相关的:stackoverflow.com/a/2186908/453056
标签: c# inheritance operator-overloading