連載:[完全版]究極のC#プログラミング

Chapter13 自動実装と自動定義

川俣 晶
2010/02/17

13.3 自動実装プロパティのアクセス制御

 前掲の「リスト13.4 通常のプロパティ定義」と「リスト13.5 自動実装されるプロパティ定義」は完全に同等ではない。最大の相違は、自動実装されるフィールド(「バッキングフィールド」(Backing Field)と呼ぶ)にアクセスできない点にある。

 このため、次のリスト13.6のようなコードは、ストレートに自動実装プロパティに書き換えることができない。「a」に相当するフィールドにはアクセスできなくなるため、「Console.WriteLine(a);」がコンパイルできなくなるのである。

class SomeClass
{
  private int a = 0;

  public int A
  {
    set { a = value; }
  }

  public void WriteA()
  {
    Console.WriteLine(a);
  }
}
リスト13.6 フィールドにアクセスするので自動実装プロパティが使えない例

 しかしながら、この特徴は少なくとも1つのメリットをもたらす。大文字の名前と小文字の名前*8を使い分けることができない日本語名を使った場合でも、問題なく自動実装プロパティを使用できるのである(リスト13.7参照)。

class SomeClass
{
  public int 日本語名 { get; set; }
}
リスト13.7 日本語名で自動実装プロパティを使用する

 では、リスト13.6に相当するコードは、自動実装プロパティを使用した場合は実現できないのだろうか?

 この問題については、「プロパティのgetはprivateに、setはpublicにできるか?」と読み替えれば可能となる。次のリスト13.8は、プロパティのgetアクセサとsetアクセサに対して別のアクセシビリティを指定した例である。このプロパティAは、クラス内からは読み出せるが、クラス外からは読み出せない。しかし、クラス外からの書き込みはできる。

class SomeClass
{
  public int A { private get; set; }

  public void WriteA()
  {
    Console.WriteLine(A);
  }
}
リスト13.8 getアクセサはprivate、setアクセサはpublic

 完全に等価ではないが、これで同等の機能を発揮するコードを記述することができた。

*8 C#ではフィールドに小文字の名前を使い、対応するプロパティには、その先頭1文字を大文字にした名前を使うことが多い。これは、privateメンバーは先頭を小文字に、publicメンバーは先頭を大文字にするルールを摘要することで発生する必然的な状況である。


 INDEX
  [完全版]究極のC#プログラミング
  Chapter13 自動実装と自動定義
    1.13.1 ラムダ式を使ったダーティテク―refの代役
    2.13.2 自動実装プロパティ
  3.13.3 自動実装プロパティのアクセス制御
    4.13.4 読み出し専用、書き込み専用はない
    5.13.5 “名無し”のクラス―匿名型
    6.13.6 匿名型の等価性
    7.13.7 匿名型の簡易記法
    8.13.8 匿名型の使用目的
    9.13.9 オブジェクト初期化子
    10.13.10 オブジェクト初期化子の本質とは?
    11.13.11 コレクションはreadonlyでも初期化できる
    12.13.12 オブジェクト初期化子の使用例/練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間