現在C#を勉強中です。
C#にプロパティという機能がありますが調べた感じだと
フィールドと、それに対するゲッター・セッターを冗長性なく実装できる機能
と解釈したのですが、
疑問がいくつか出ました。
- プロパティを使うのとプロパティを使わず実装することに見た目以外に違いはあるのか
- プロパティを使う必要性はあるのか。普通に使わずに行うと何か問題はあるのか
- プロパティを使わないとできないことがあるのか。(はたまたプロパティだとできないことはあるか)
- どちらがスタンダードなやり方か(現場でも個人でも)
まだC#は勉強し始めたばかりなのでおかしいところがあるかもしれませんが、C#に詳しい人教えてください。
宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/11 10:17
回答3件
0
(1) オブジェクト指向の概念の一つ「カプセル化」を実現するため、通常クラス内の各フィールドへの直接アクセスは禁止するようにしておき、外部からはパブリックプロパティで各フィールの値を取得したり設定したりするということがもともとのプロパティの目的のはずです。
(2) プロパティを使う目的には、開発者が意図した規則に基づいてフィールドを正しく使用できるよう保証するということもあります。例えば、ユーザーが Visual Studio でプロパティを設定する際、範囲外であると例外をスローするようなこともできます。
(3) ちょっと具体例が出てきませんが、例えば JSON を .NET のオブジェクトにデシリアライズするような場合、クラスにプロパティ定義が必要ということがあるはずです。あと、Entity Framework Code First でのモデルを定義を行う場合もフィールドではダメで、プロパティの定義が必要です。
いちいちプロパティを定義するのは面倒と思うかもしれませんが、自動実装プロパティを利用すれば簡単です。
投稿2020/07/11 09:43
編集2020/07/11 09:52退会済みユーザー
総合スコア0
0
ベストアンサー
プロパティを使うのとプロパティを使わず実装することに見た目以外に違いはあるのか
見た目以外に違いはありません。が、見た目の影響は意外と広いと思います。例えば、元はフィールドで実装したもので、こう使えましたら:
c#
1class PositiveInt { 2 int value 3} 4PositiveInt n = new PositiveInt() 5n.value = 3 6n.value = -3
クラスは正整数ですけど、最後の行では負整数を入れてしまいました。この状況を防ぎたい。プロパティで実装すれば、使う側は何もしなくてもいいです。セッターで実装すれば、使う側も全部セッターを使わなければなりません。リファクタリングの作業量はかなり違います。
プロパティを使う必要性はあるのか。普通に使わずに行うと何か問題はあるのか
上記のように、プロパティでフィールドに条件の追加ができます。プロパティを使わなくてもその条件を追加するのなら、新たな条件付きクラスを作るか、その条件をすべてのメソッドでチェックしなければなりません。もちろん、条件を捨てればいけません。プロパティを使わないと色々作業量が多くなります。
プロパティを使わないとできないことがあるのか。(はたまたプロパティだとできないことはあるか)
プロパティを使わないとできないことがありませんが、使わないと作業量が多くなります。
どちらがスタンダードなやり方か(現場でも個人でも)
ゲッターセッターよりはプロパティがスタンダードです。
投稿2020/07/11 10:00
総合スコア464
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/11 10:14
退会済みユーザー
2020/07/11 10:24
2020/07/11 10:26
2020/07/11 10:59 編集
0
C#に限定される話でなく、オブジェクト指向の問題だと思います。
ググればこんなのが見つかりますが
要は「カプセル化」を行うことで、そのプロパティを利用する他のクラスへの影響を与えることなく内部データ(フィールド)を変更できたり、プロパティへのget/set時に特定の動作(イベント等)を発生させたりする事が可能になります。
より詳しく学びたい場合はC#という言語に限らず、オブジェクト指向そのものを学習してください。
投稿2020/07/11 09:29
総合スコア8947
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/11 09:35
2020/07/11 09:41
2020/07/11 09:45
2020/07/11 09:51
退会済みユーザー
2020/07/11 09:55
2020/07/11 09:58
2020/07/11 10:01
2020/07/11 10:02
退会済みユーザー
2020/07/11 10:03
2020/07/11 10:12
退会済みユーザー
2020/07/11 10:28 編集
2020/07/11 10:28
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。