重複の可能性:
C# の == 演算子と Equals() メソッドの違い?
平等には 2 つの形式があります。最初は失敗し、2 番目は成功します。
(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 クラスには、 static bool Equals(string a, string b) メソッドと static bool Equals(object a, object b) メソッドの両方が含まれています。違いは、前者は String クラス自体の中で定義され、後者は Object クラス (String の基本クラス) から継承されることです。
これは意味的には理にかなっていますが、OO と C# 言語のより広いコンテキストでは意味がありますか?
なぜ私はその質問に悩まされているのですか? ええと、ちょうどバグを見つけたので、「これを覚えているだけ」ではなく、韻または理由の下でこれを脳内にファイルしたいと思います。カテゴリの前に噛まれました。
アップデート:
現在、(機能的な観点から) プリミティブとポリモーフィズムを扱うという観点からこれについて考えています。私はますます機能的なことをしているので、母国語が私を混乱させたのはおそらくこれが理由です. 私はまだこれについて考え終わっていません (いいえ、私は実用的ではありません。私は言語設計に惹かれています)。全部答えてくれてありがとう!