两种形式的平等,第一种失败,第二次失败.
(object)"abc" == (object)"abc"
false
((object)"abc").Equals((object)"abc")
true
Run Code Online (Sandbox Code Playgroud)
在下面的参考文献中,我们看到"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; }
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我不同意这个问题的完全重复规则,但是嘿.
答案说明:
... String类包含静态bool Equals(字符串a,字符串b)方法和静态bool Equals(对象a,对象b)方法.不同之处在于前者是在String类本身中定义的,而后者是从Object类继承的(它是String的基类)
在语义上这是有道理的,但它在OO和C#语言的更广泛的上下文中是否有意义?
为什么我要烦恼这个问题?好吧,刚刚发现了一个错误,我想在我的大脑中以韵律或理由而不是在"只记得这个"的情况下将其归档,它会在类别之前咬你.
更新:
目前正在考虑使用原语(从功能角度来看)Vs多态性.因为我一直在做越来越多的功能性的东西,这可能是为什么母语让我感到困惑.我还没有想到这一点(不,我不是务实.我被语言设计所吸引).感谢您的回复!
(object)"abc"
Run Code Online (Sandbox Code Playgroud)
将从字符串对象创建一个对象引用。这样做
(object)"abc" == (object)"abc"
Run Code Online (Sandbox Code Playgroud)
将创建两个不相等的对象引用。
但是,使用 equals 方法将检查存储的字符串值是否相等。同样,这不是所有对象的默认实现,而是 String 对象的默认实现。对于任何自定义对象,您应该定义自己的 equals 方法的自定义实现来实现此行为。
| 归档时间: |
|
| 查看次数: |
1256 次 |
| 最近记录: |