两种形式的平等,第一种失败,第二种成功。
(object)"abc" == (object)"abc"
false
((object)"abc").Equals((object)"abc")
true
在下面的参考资料中,我们看到“C# 中的等式运算符不是多态的”
ref: C# 中的字符串相等运算符 ==
顺便说一句:仍然不确定为什么这是一个问题。我以为可能是这样的,但这并不是因为这个测试成功了。
static void Main(string[] args) {
var o = new classOfT<string>() { val = "abc" };
Console.WriteLine((object)o.val == "abc");
}
public class classOfT<T> {
public string val { get; set; }
}
顺便说一句:我不同意关于这个问题的完全相同的规则,但是,嘿。
答案指出:
... String 类包含一个静态 bool Equals(string a, string b) 方法和一个静态 bool Equals(object a, object b) 方法。不同之处在于前者是在 String 类本身中定义的,而后者是从 Object 类(它是 String 的基类)继承而来的
从语义上讲,这是有道理的,但在更广泛的 OO 和 C# 语言环境中是否有意义?
我为什么要纠结这个问题?好吧,刚刚发现了一个错误,我想在我的大脑中将其归档在押韵或理由下,而不是在“记住这个”下,它在类别之前被咬了。
更新:
目前正在考虑使用原语(从功能角度)与多态性。由于我一直在做越来越多的功能性东西,这可能就是为什么母语让我感到困惑。我还没有考虑完这个(不,我不务实。我被语言设计所吸引)。谢谢大家回复!