C# の側面を説明する Jon の回答に加えて、VB の機能は次のとおりです。
VB withOption Strict On
では、 による比較は=
常に値の等価性をテストし、参照の等価性をテストすることはありません。実際、 は .を定義していないため、Option Strict On
切り替えるとコードはコンパイルされません。このオプションは常にオンにしておく必要があります。ハエトリグサよりも効果的にバグをキャッチします (ただし、特定のケースでは、この緩い動作が実際には正しいことを行います)。1System.Object
Operator=
実際、 を使用するとOption Strict On
、VB は C# よりもさらに厳密に動作します。C# では、への呼び出しをトリガーするa == b
かSomeType.operator==(a, b)
、存在しない場合は参照等価比較を呼び出します (これは を呼び出すことと同じですobject.ReferenceEquals(a, b)
)。
一方、VB では、比較a = b
は常に等価演算子を呼び出します。2参照等価比較を使用する場合は、使用する必要がありますa Is b
(これも と同じObject.ReferenceEquals(a, b)
です)。
1)を使用することが悪い考えである理由を次に示しOption Strict Off
ます。私は .NET が公式にリリースされる前から数年前まで、ほぼ 10 年間 VB.NET を使用してきましたが、.NET が何をするのかまったくわかりませa = b
んOption Strict Off
。ある種の等価比較を行いますが、正確に何が起こり、その理由はわかりません。ただし、 C# の機能よりも複雑dynamic
です (十分に文書化された API に依存しているため)。MSDN の内容は次のとおりです。
強力な型付けOption Strict On
を提供し、データの損失を伴う意図しない型変換を防ぎ、遅延バインディングを禁止し、パフォーマンスを向上させるため、使用することを強くお勧めします。
2) Jon は 1 つの例外として文字列について言及しました。文字列では、後方互換性のために等値比較がさらにいくつかのことを行います。