問題タブ [automatic-properties]

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.

0 投票する
18 に答える
48498 参照

c# - C# 3.0 の自動プロパティ — 役に立つかどうか?

注: これは、C# を始めたときに投稿されました。2014 年の知識からすれば、自動プロパティは C# 言語にこれまでに起こった最高のものの 1 つであると断言できます。

プライベート フィールドとパブリック フィールドを使用して、C# でプロパティを作成するのに慣れています。

さて、.NET 3.0 では、自動プロパティを取得しました。

これは哲学的/主観的な質問であることは承知していますが、フィールドごとに 5 行のコードを保存する以外に、これらの自動プロパティを使用する理由はありますか? 私の個人的な不満は、これらのプロパティが私から隠していることであり、私は黒魔術の大ファンではありません.

実際、非表示のプライベート フィールドはデバッガーにも表示されません。しかし、実際に getter/setter ロジックを実装したい場合は、プライベート/パブリック ペアを使用する必要があります。

後で getter/setter ロジックを変更する機能を失うことなく、多くのコード (1 行対 6 行) を節約できるという利点がありますが、パブリック フィールド "Public string Title" を宣言せずに宣言するだけで、既にそれを行うことができます。 { get; の必要性 設定; } ブロックすることで、より多くのコードを節約できます。

それで、私はここで何が欠けていますか?なぜ自動プロパティを実際に使用したいのでしょうか?

0 投票する
23 に答える
1091785 参照

c# - C#の自動プロパティに初期値を与える最良の方法は何ですか?

C# の自動プロパティに初期値を与えるにはどうすればよいですか?

コンストラクターを使用するか、古い構文に戻します。

コンストラクターの使用:

通常のプロパティ構文の使用 (初期値あり)

より良い方法はありますか?

0 投票する
6 に答える
4400 参照

c# - C# 3.0 自動プロパティ - カスタム動作を追加できますか?

自動プロパティの get/set メソッドにカスタム動作を追加する方法があるかどうか知りたいです。

私が考えることができる明らかなケースは、実装の一部として、すべての set プロパティ メソッドが任意のPropertyChangedイベント ハンドラーで呼び出されるようにすることです。System.ComponentModel.INotifyPropertyChangedこれにより、各プロパティが自動プロパティ構文を使用して定義される、監視可能な多数のプロパティをクラスに含めることができます。

基本的に、クラス スコープを持つ get/set テンプレートまたは post get/set フックに似たものがあるかどうか疑問に思っています。

(同じ最終機能は、もう少し冗長な方法で簡単に実現できることを知っています-パターンの重複が嫌いです)

0 投票する
6 に答える
4061 参照

c# - 自動実装プロパティについて学ぶ

自動実装されたプロパティを使用する単純なクラスがあります。

クラス全体で変数 BarName を使用していることは明らかで、プロパティ値を設定するときにロジックを追加する必要があります (すべて大文字にする必要があります)。これは、_BarName などの BarName のプライベート変数を作成し、クラス全体で使用されている現在の BarName 変数を _BarName に変更する必要があるということですか?

自動実装されたプロパティを使用することの意味と、何かを変更する必要がある場合に何が必要になるかを理解しようとしています。上記のように、プロパティは基本的に同じままであるため、リファクタリングは重大な変更ではないと想定しています。クラスをそのまま維持し、必要なロジックを追加するには、クラス内で少し作業が必要でした。

より意味のある別の例として、setter または getter を使用するときにメソッドを呼び出す必要があるというものがあります。値を変更するだけではありません。

これは、プロパティをセットアップするためのコードの行数と行数の公正なトレードオフのようです。

0 投票する
4 に答える
183563 参照

c# - C# 自動プロパティの初期化

私はこのようなクラスを書くことに慣れています:

Bar を自動プロパティに変換するのは便利で簡潔に思えますが、コンストラクターを追加してそこに初期化を入れずに初期化を保持するにはどうすればよいでしょうか?

コンストラクターの追加は、自動プロパティから得られるはずの労力の節約と一致していないことがわかります。

このようなものは私にとってより理にかなっています:

0 投票する
5 に答える
1376 参照

c# - 自動プロパティを正しく処理するAC#からVB.Netへの変換ユーティリティ?

同様の質問よりも指摘されているため、これが重複と見なされないことを願っています(C#からVB.netへの変換ユーティリティの特定の弱点について知りたいです)。

私はこの.netコードコンバーターのようなツールを使用してクラスライブラリをVBに変換することを検討してきました。これは、私のグループでC#に慣れているのは私だけだからです。私が遭遇した問題は、自動プロパティの適切なVBが生成されないことです。空のget/setルーチンを作成します。

したがって、この:

これになります:

ここここにリンクされているツールにも同様の問題があります。有効なプロパティを作成するものもありますが、設定されたルーチンのアクセスレベルを尊重していません。

副次的な質問-DeveloperFusionでコンバーターを修正する場合、次のようなものを返すようにしますか?

0 投票する
2 に答える
1025 参照

svn - 新しいSVN構成に従ってsvn-propertiesをリセットするには?

最近、ローカルの svn 構成ファイルに一連の変更を加えました。主に約 15 種類のファイル タイプの svn:mime-type プロパティを修正しました。ここで、この新しい構成に従って、以前にチェックインしたすべてのファイルをリセットする必要があります。SVN は、ADD と IMPORT に対してのみ auto-prop をトリガーするようです。では、個別に行って新しい MIME タイプを指定せずにこれを行うにはどうすればよいでしょうか?

ありがとう!

  • dt
0 投票する
2 に答える
5644 参照

c# - c#で自動プロパティを使用するために構造体で:this()を呼び出す必要があるのはなぜですか?

次のような自動プロパティを使用して C# で構造体を定義するとします。

ファイルをビルドしようとすると、コンパイル エラーが発生しますThe 'this' object cannot be used before all of its fields are assigned to。これは、コンストラクターを変更して、次のようにデフォルトのコンストラクターへの連鎖呼び出しを行うことで解決できます。

私の質問は、なぜこれが機能するのか、何が起こっているのかということです。私は推測を持っており、IL を見てそれを証明しようとしましたが、IL を分解できると思うかどうかは冗談です。しかし、自動プロパティは、コンパイラが舞台裏でプロパティのフィールドを生成することで機能すると思います。これらのフィールドにはコードからアクセスすることはできません。すべての設定と取得は、プロパティを通じて行う必要があります。構造体を作成するとき、既定のコンストラクターを明示的に定義することはできません。そのため、舞台裏では、開発者が見ることができないフィールドの値を設定するデフォルトのコンストラクターをコンパイラーが生成している必要があります。

すべての IL ウィザードは、私の理論を証明または反証することを歓迎します。

0 投票する
5 に答える
2421 参照

c# - 自動プロパティにゲッターとセッターの両方が必要なのはなぜですか?

C#で、自動実装プロパティを宣言する場合、getとsetの両方の部分を宣言する必要があるのはなぜですか?

すなわち

これは単なるシンタックスシュガーではありませんか?つまり、コンパイラはプロパティのプライベートフィールドを挿入しますか?では、なぜ問題なのですか?

奇妙。

0 投票する
9 に答える
42398 参照

c# - C# 自動プロパティ - 「get; set;」と書かなければならないのはなぜですか?

C# の自動プロパティで get と set の両方が必須である場合、わざわざ「get; set;」と指定する必要があるのはなぜですか。まったく?