問題タブ [backing-field]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - バッキングフィールドの有無にかかわらず自動プロパティ-設定?
自動プロパティを使用する場合、コンパイラは画面の背後に独自のバッキングフィールドを作成することを知っています。しかし、私が学ぶために読んだ多くのプログラムでは、人々が明示的に書いているのを見ます
上と下の違いは何ですか?
ゲッターまたはセッターに実際に副作用がある場合にプロパティを使用するのは明らかだと理解していますが、そうではないことがよくあります。また、構造体の場合はバッキングフィールドを明示的に使用する必要があることを理解しています。プロパティを介してそのメンバーにアクセスすることはできません。
私が見つけた唯一の違いは、値を呼び出す方法が、それが定義されているクラス内で異なることです。それは単純な設定ですか、それともそのプロパティを介して、または直接アクセスすることによって値を呼び出すことに何か他のものがありますか?分野?簡単な慣習?
c# - バッキング フィールドが存在する場合、リフレクションによってクラス フィールドを取得するにはどうすればよいですか?
私は単純なPOCOクラスを持っています、例えば
私が電話するとき:
そのクラス(インスタンス)では、FieldInfoゲッター/セッターを自動的に生成したメンバー(つまりint i上記)を取得できません。
実際、私はそれらのカスタム属性 ( MyAtrib) を読み取ろうとしていますが、{get; set;}.
何故ですか?パブリックなので、両方を取得することを期待していますがi、それは(プライベート)バッキングフィールドiです。
どういうわけか、リフレクションを介してに到達できますiか?MyAtrib
properties - プロパティのバッキング フィールドの標準命名規則は何ですか?
バックグラウンド
TypeScript で最も一般的に使用されている命名規則に従いたいと考えています。公式ウェブサイトには、タイプとモジュールに Pascal ケース、その他ほぼすべてにキャメルケースを使用したコード例が示されていることに気付きました。
例
現在、バッキング値をカプセル化するプロパティを実装しています:
問題
プロパティの名前はですstatus。C# では、通常、プロパティStatusとバッキング値に名前を付けますstatus。プロパティにキャメルケースを使用するのが慣習であるため、これは機能しません。一般に、他の TypeScript コードとの一貫性を保つためにどの規則を使用すればよいかわかりません。
質問
C# や Java などの他の言語には、公式または事実上の標準の規則があるようです。TypeScriptでバッキングフィールドに名前を付けるためのそのような権威ある、またはデファクトスタンダードの規則はありますか?
ノート
僅差で投票する人へ: 私は意見を求めているわけではないことに注意してください。上記の要約された質問で要求されているように、客観的な情報を探しています。
c# - 自動実装プロパティのバッキング フィールドへの参照
C# では、自動実装されたプロパティは非常に便利です。ただし、これらはバッキング フィールドをカプセル化するだけで、ref または out 引数として渡すことはできません。例えば:
この特定のケースでは、次のようなハックで問題を回避できます。
C# で自動実装されたプロパティのバッキング フィールドへの参照を使用するよりエレガントな方法はありますか?
c# - auto プロパティを使用して「struct」のデフォルト コンストラクターを呼び出す必要があるのはなぜですか
これはコンパイルされません
しかし、これは:
何故ですか?
コンパイル時エラーは
エラー CS0188: すべてのフィールドが割り当てられる前に、'this' オブジェクトを使用することはできません
と
エラー CS0843: コントロールが呼び出し元に返される前に、自動的に実装されたプロパティ 'SO_MMul.Matrix.Columns' のバッキング フィールドを完全に割り当てる必要があります。コンストラクター初期化子から既定のコンストラクターを呼び出すことを検討してください。
とにかく、パラメーター化されたコンストラクターはデフォルトのコンストラクターを呼び出しませんか?
.net - VB.NET プロパティ宣言
VB.NET では 2 つの方法でプロパティを定義できることがわかりました。
以下のように
または以下のように一行で
違いはありますか、それとも後でプロパティを定義する方法が改善されています。
c# - C# の Set Backing Field で値を掛ける
setC# のバッキング フィールドの値を乗算しようとしています(ASP.NET MVC アプリケーションの場合)。浮動小数点数の除算の問題を回避するためにこれを行っているため、プロパティは整数であり、外観のために乗算および除算し、10 進数として格納する必要があります。
here の回答に従って、バッキングフィールドを使用して、次のようにプロパティでこれらの操作を完了しようとしています:
次の警告が表示されます。
ステートメントとして使用できるのは、割り当て、呼び出し、インクリメント、デクリメント、待機、および新しいオブジェクト式のみです。
ビュー/コントローラーでそうせずに、数値を乗算および除算する適切な方法を誰かが説明できますか。
c# - ハッシュテーブル キーとしての MethodBase
基本クラスに含まれる保護された Hashtable の派生クラスで宣言されたプロパティのバッキング フィールドをいくつか格納したいと考えています。派生クラスでのこのメカニズムの使用は、できるだけ単純にする必要があります。
では、呼び出しプロパティ (getter - プロパティは読み取り専用) に関する情報を提供するために使用できるので、MethodBase.GetCurrentMethod()この特定のバッキング フィールドにアクセスできる唯一のプロパティとして認識できますか?
編集:
基本的に、私はパターンを実装したい:
次のようになります。
そして基本クラスで
これを行う理由は、プロパティの使用を簡素化するためです。プライベート プロパティを使用していくつかのオブジェクトを作成し、それらをクラスで使用します。しかし、それらのバッキング フィールドを同じクラスに格納すると、プロパティと同じようにそれらにアクセスできるため、(将来いくつかの派生クラスを作成するユーザーを意味する) 誤ってプロパティの代わりにバッキング フィールドを使用する可能性があります。オブジェクトの作成と使用を許可しながら、バッキングフィールドへのアクセスを制限したかったのです。
次のようなバッキング フィールドで ObsoleteAttribute を使用しようとしました。
しかし、第一に、ユーザーにこのパターンの使用を強制することはできません。第二に、派生クラスに記述するコードが多すぎるため、上で述べたように、できるだけ単純にしたいと考えています。