この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 31087|答える: 0

[出典] C# 匿名型学習日誌

[リンクをコピー]
掲載地 2020/10/16 17:41:04 | | | |
複雑なメソッド、イベント、コンストラクタのような複雑なクラスを定義したくない場合、匿名型のカスタムデータ型->を動的に生成できます。

1. 匿名性の種類を定義する

匿名型を定義する際には、varキーワードとオブジェクトの初期化構文を使う必要があります。

var: コンパイラはコンパイル時に自動的に新しいクラス定義を生成します(C#コードではクラス名は見えません)。

初期化:コンパイラに新たに作成されたタイプに対してプライベートなバックグラウンドフィールドや(読み取り専用の)プロパティを作成するよう指示します。

パラメータを渡して匿名型を構築し、関連情報を印刷します



コール:匿名型はハードコードを使って構築することも可能です



2. 匿名型の内部表現

すべての匿名型は自動的にObjectから継承されるため、Carオブジェクトに対してToString、GetHashCode、Equalsを使えます。次のことを呼び出してみます:



判定と結果:







carオブジェクトのタイプは<>f__AnonymousType03(あなたのものは異なるかもしれません)、匿名型名はコンパイラに感知され、干渉できないCILコードです。

3. ToString() メソッドと GetHashCode() の実装。

1.ToString()



2. GetHashCode()

各匿名型の変数を用いて、System.Collections.Generic.EqualityComparerの型入力としてハッシュ値を計算し、<T>2つの匿名型が同じ性質を持ち同じ値を与えられた場合にのみ同じハッシュ値を生成します。

4. 匿名型の等しい意味

等価(Equals)





結果を分析する:

1. Equals():コンパイラはEquals()を上書きし、値の意味論(例:2つのオブジェクトの各データメンバーの値の記録)に基づいてオブジェクトが等しいかどうかを判定します。

2. == 演算子:匿名型は同等の演算子を過負荷にしないため(== , !=), == 参照を比較し、内容を比較しません。

3. GetType(): 同じアセンブリ内で同じ属性を持つ2つの匿名型を宣言すると、コンパイラは1つの匿名型の定義のみを生成するためです。

5. 匿名型を含む匿名型



概要:

実際、特にLINQを使う際には匿名型の使用に注意し、匿名型の出現からといって強い型付けのクラスや構造の使用を諦めてはいけません。

実際、匿名型自体には多くの制限があります:

  • 匿名タイプの名前はあなたがコントロールできません
  • 匿名型はSystem.Objectを継承します
  • 匿名型のフィールドや属性は常に読み取り専用です
  • 匿名型はイベント、カスタムメソッド、カスタム演算子、カスタムリライトをサポートしません
  • 匿名型は暗黙的に封印されています
  • 匿名型のエンティティ作成はデフォルトのコンストラクタのみを使用します


関数を定義せずにエンティティの形状を素早く定義したい場合、匿名型を使えます。




先の:SQL Serverのデータは挿入スクリプトとしてエクスポートされます
次に:.net/C#は非匿名関数&lt;&gt;f__AnonymousType0メソッドを反映しています
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com