検索

.net

オブジェクトの静的ReferenceEquals()

オブジェクトの静的Equals()

オブジェクトの例Equals()

operator==

には、同等性を比較する方法がいくつかあります。以下にそれらの違いと使用法を紹介します。

ReferenceEquals

ReferenceEquals は、参照型の参照が同じオブジェクトを指しているかどうかを比較するために使用されます。参照型のみを比較できます。値の型が渡されると、常に false が返されます。これは、値の型がパラメーターとして使用される場合、最初にボックス化されるためです。ボックス化された値の型が等しいことを参照する場合でも、依然として 2 つの異なるオブジェクトであるため、変数は を指します。異なるオブジェクトなので、常に false を返します。

int x = 10;
int y = 10;
bool b1 = object.ReferenceEquals(x,y);
参照型を比較している場合、2 つの参照が同じを指している場合、結果は必ず false を返します。 object の場合、それは true です。 Entity Class first -Public Classの人を定義します;

パブリック文字列FirstName

get { return _firstName; }

}

プライベート文字列_lastName;

public string LastName
{ _lastNameを返す }値 ; }
}

public Person() { }

public Person(int personId, string firstName, string lastName)

{

this._personId = personId
this._lastName = lastName;
}
}
呼び出しコード

人物 person1 = 新しい人物(1,"エドリック","リュー");

人物 person2 = 新しい人物(2, "メシ", "ルオ");

人物 person3 = person2;
bool br1= object.ReferenceEquals(person1,person2);
bool br2 = object.ReferenceEquals(person2, person3);
最初のものは false を返し、2 つ目は true を返すことがわかります。では、オブジェクトの 1 つが null の場合、または両方のオブジェクトが null の場合はどうなるでしょうか?結果は false になりますが、両方とも null の場合はどうなりますか?結果は真実です。彼らは例外をスローしません。

Instance Equals

Instance Equals は、比較的複雑な比較方法です。 Equals のインスタンスは、参照が同じオブジェクトを指しているかどうかを比較したり、オブジェクトを値で比較したりできます。オブジェクトを値で比較したい場合は、Equals オブジェクトをオーバーロードして比較ロジックを実装する必要があります。同時に、Equals はデフォルトで比較値タイプの等価性もサポートします。では、オブジェクトの値の等価比較を可能にするために Equals をオーバーロードするにはどうすればよいでしょうか?


MSDN にはいくつかのガイドラインがリストされています

浮動小数点型が関係する場合を除き、x.Equals(x) は true を返します。

x.Equals(y) は y.Equals(x) と同じ値を返します。

x.Equals(y) は、x と y の両方が NaN の場合に true を返します。

(x.Equals(y) && y.Equals(z)) は、x.Equals(z) が true を返す場合にのみ true を返します。

x.Equals(y) を連続して呼び出すと、x と y によって参照されるオブジェクトが変更されない限り、同じ値が返されます。

x.Equals(nullNothingnullptrnull 参照 (Visual Basic では Nothing)) は false を返します。 shotされたコードを見てください

publicクラスの人{

privateint _personid; _firstName ;

パブリック文字列 FirstName

{

get { return _firstName; }

set { _firstName = 値; }

}

プライベート文字列 _lastName;

public string LastName

{

get { return _lastName; = 値; }

}

パブリック パーソン() { }

パブリック パーソン(int personId, string firstName, string lastName)

{

this._personId = personId =

this._lastName = lastName; ;
}

public override bool Equals(object obj)

{
if (obj != null && obj は person)
{
person p = obj as Person;

return (personId == p.personId) && ( FirstName == p.FirstName) && (LastName == p.LastName);

}

else

{
return false;
}

public override int GetHashCode()

{

returnbase.GetHashCode()^personId ;

}

}
呼び出しコード

人物 person1 = 新しい人物(1,"エドリック","リュー");
人物 person3 = 新しい人物 (2, "メシ", "ルオ"); ;

人 person4 = 新しい人(1, "エドリック", "リュー");

Console.WriteLine(person4.Equals(person1));

結果として、最初のものが true で、2 番目のものが false になります。リロード中に例外が発生してはなりません。では、Person を継承するクラスがある場合、派生クラスをどのように比較すればよいでしょうか?

public クラス Student:People
{
private int _studentNumber;

public int StudentNumber
{
get { return _studentNumber; }
set { _studentNumber = 値; }
}

public Student() { }

public Student(int personId, string firstName, string lastName, int studentsNumber)
{
this.personId = personId; 
this.FirstName = 名; 
this.LastName = lastName; 
this._studentNumber = 学生番号; 
}

public override bool Equals(object obj)
{
if (obj != null && obj is Person)
{
Student s = obj as Student; 
base.Equals(obj)&&StudentNumber==s.StudentNumber; を返します。 
}
else
{
return false; 
}
}

public override int GetHashCode()
{
returnbase.GetHashCode()^StudentNumber; 
}
}
调用代码

生徒 s1 = 新しい生徒(1, "エドリック", "リュー", 1); 
学生 s2 = 新しい学生(2, "Meci", "Luo", 2); 
生徒 s3 = 新しい生徒(1, "エドリック", "リュー", 1);

Console.WriteLine(s1.Equals(s2)); 
Console.WriteLine(s1.Equals(s3)); 
私が必要としているのは、父クラスの Equals メソッドと、派生クラス内の新しい値を比較することだけです。種類比較の型に例の Equals がロードされている場合は、true を返すこともできます。

1、同じオブジェクトを参照する

2、2 つの null を比較する

3 ,重ロードEqualsの例メソッドを返すtrue

Student s1 = new Student(1, "Edrick", "Liu", 1); 

学生 s2 = 新しい学生(2, "Meci", "Luo", 2); 

生徒 s3 = 新しい生徒(1, "エドリック", "リュー", 1); 

学生 s4 = s3;


Console.WriteLine(object.Equals(s1,s3)); 
Console.WriteLine(object.Equals(s4, s3)); 
この 2 つは両方とも true で、ここでは静的な Equals には 1 つの領域があり、静的な Equals にはパラメータが null の場合に異常が発生します。重ロード==运算符,会発行什么

Student s1 = new Student(1, "Edrick", "Liu", 1); 
学生 s2 = 新しい学生(2, "Meci", "Luo", 2); 
生徒 s3 = 新しい生徒(1, "エドリック", "リュー", 1); 

学生 s4 = s3;

Console.WriteLine(s1==s3); 

Console.WriteLine(s3==s4); 
最初の 1 つは false、2 番目のは true です。これは、私たちの概念に適合しないため、Equals を再ロードするには == を再ロードする必要があり、同様に重畳する == も Equals を再ロードする必要があります。 setcoll[0]==co[0] は参照ですが、私たちの Equals 比較がオブジェクトの値である場合、最後の世代コードも使用できません。

== 算数

== 号算子のその他の例の Equals には大きな領域がありません、== は算数、Equals はメソッドです。他のものは上書きできます。 == の重畳に関しては、数値内の数値重畳を参照することができます。 null は false を返しますが、特別な値の種類を比較した場合は、最初から false を返します。 Equals: 静的なメソッドであり、上書きできません。Equals、比較参照、または比較値がない場合は、Equals メソッドを再ロードします。 、常用

== 算数: 参照することも、値を指定することもできます。

MoreEquals,ReferenceEquals,==的領域别相关文章关注PHP中文网!
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
C#と.NET:2つの関係を理解し​​ますC#と.NET:2つの関係を理解し​​ますApr 17, 2025 am 12:07 AM

C#と.NETの関係は切り離せませんが、同じものではありません。 C#はプログラミング言語であり、.NETは開発プ​​ラットフォームです。 C#は、コードの書き込み、.NETの中間言語(IL)にコンパイルされ、.NET Runtime(CLR)によって実行されるために使用されます。

c#.netの継続的な関連性:現在の使用法を見るc#.netの継続的な関連性:現在の使用法を見るApr 16, 2025 am 12:07 AM

C#.NETは、複数のアプリケーション開発をサポートする強力なツールとライブラリを提供するため、依然として重要です。 1)C#は.NETフレームワークを組み合わせて、開発を効率的かつ便利にします。 2)C#のタイプの安全性とゴミ収集メカニズムは、その利点を高めます。 3).NETは、クロスプラットフォームの実行環境とリッチAPIを提供し、開発の柔軟性を向上させます。

Webからデスクトップまで:C#.NETの汎用性Webからデスクトップまで:C#.NETの汎用性Apr 15, 2025 am 12:07 AM

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

c#.net and the Future:新しいテクノロジーへの適応c#.net and the Future:新しいテクノロジーへの適応Apr 14, 2025 am 12:06 AM

C#と.NETは、継続的な更新と最適化を通じて、新しいテクノロジーのニーズに適応します。 1)C#9.0および.NET5は、レコードタイプとパフォーマンスの最適化を導入します。 2).Netcoreは、クラウドネイティブおよびコンテナ化されたサポートを強化します。 3)ASP.Netcoreは、最新のWebテクノロジーと統合されています。 4)ML.NETは、機械学習と人工知能をサポートしています。 5)非同期プログラミングとベストプラクティスはパフォーマンスを改善します。

c#.netはあなたにぴったりですか?その適用性の評価c#.netはあなたにぴったりですか?その適用性の評価Apr 13, 2025 am 12:03 AM

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NET内のC#コード:プログラミングプロセスの調査.NET内のC#コード:プログラミングプロセスの調査Apr 12, 2025 am 12:02 AM

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#.NET:コアの概念とプログラミングの基礎を探るC#.NET:コアの概念とプログラミングの基礎を探るApr 10, 2025 am 09:32 AM

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

テストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストテストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストApr 09, 2025 am 12:04 AM

C#.NETアプリケーションのテスト戦略には、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。 1.単位テストにより、コードの最小ユニットがMSTEST、ヌニット、またはXUNITフレームワークを使用して独立して動作することを保証します。 2。統合テストでは、一般的に使用されるシミュレートされたデータと外部サービスを組み合わせた複数のユニットの機能を検証します。 3.エンドツーエンドのテストでは、ユーザーの完全な操作プロセスをシミュレートし、通常、セレンは自動テストに使用されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター