C#のプロパティは実はメソッドなのか?
2023-08-13 21:56:29
質問
今まで、私は以下のような印象を抱いていました。
Properties
&です。
Methods
はC#では2つの異なるものです。と思っていたら、下のようなことをやっていました。
これは私にとって「目からうろこ」でした。私は1つのプロパティを期待していました
stringProp
と、1つのメソッド
stringProp
を追加しましたが、代わりにこうなりました。
なぜこのようなことが起こったのでしょうか?誰か説明してください。
どのように解決するのですか?
はい、コンパイラはプロパティに対して一組の get と set メソッドを生成し、さらに自動実装されたプロパティに対してプライベートなバッキングフィールドを生成します。
public int Age {get; set;}
が相当するようになる。
private int <Age>k__BackingField;
public int get_Age()
{
return <Age>k__BackingField;
}
public void set_Age(int age)
{
<Age>k__BackingField = age;
}
あなたのプロパティにアクセスするコードは、これら2つのメソッドのいずれかを呼び出すようにコンパイルされます。これはまさに、パブリックフィールドをパブリックプロパティに変更することが破格の変更である理由の1つです。
Jon Skeetの なぜプロパティが重要なのか .
関連
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] Entity Framework 5 レコードを更新する
-
[解決済み] クラス内の項目の並び順。フィールド、プロパティ、コンストラクター、メソッド
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み】Nullableオブジェクトは値を持たなければならない?