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

Chapter9 プロパティとアクセシビリティ

川俣 晶
2009/11/30
Page1 Page2

9.2 アクセシビリティ指定の制約

 このようなアクセシビリティ指定はつねに可能というわけではない。まず、指定できるアクセシビリティはより制限を強くする方向にしか指定できない。publicと宣言したプロパティのget/setアクセサにprotectedを指定することはできるが、逆はできない。

 また、インターフェースメンバーの実装時には、そもそもこのようなアクセシビリティ指定を付けることができないリスト9.4は、それを付けることでコンパイルエラーになる例である。

using System;

public interface A
{
  string SampleProp
  {
    get;
  }
}

public class B : A
{
  private string s;

  public string SampleProp
  {
    internal get { return s; } // コンパイルエラーになる
    set { s = value; }
  }
}

class Program
{
  static void Main(string[] args)
  {
    B b = new B();
    b.SampleProp = "Sample";
    Console.WriteLine(((A)b).SampleProp);
  }
}
リスト9.4 インターフェースメンバーの実装時にアクセシビリティを指定する

 リスト9.4をコンパイルすると、次のようなエラーになる。

'B' はインターフェイス メンバ 'A.SampleProp.get' を実装しません。'B.SampleProp.get' は、パブリックではありません。

 これは、インターフェースメンバーのアクセシビリティはプログラマーが指定できない性質のものであり、ほかの場所で上書きできないことを意味している。

【Exercise】練習問題

 クラス内部からは読み書きできるが、クラス外部からは読み出しだけができるプロパティの定義として正しいものを選べ。

1
public string SampleProp
{
    get { return s; }
    private set { s = value; }
}

2
private string SampleProp
{
    public get { return s; }
    set { s = value; }
}

3
public string SampleProp
{
    public get { return s; }
    private set { s = value; }
}

4
string SampleProp
{
    public get { return s; }
    private set { s = value; }
}

 ◎解答:「 1 」(この行をマウスで選択してください)End of Article


 INDEX
  [完全版]究極のC#プログラミング
  Chapter9 プロパティとアクセシビリティ
    1.9.1 プロパティアクセサのアクセシビリティ
  2.9.2 アクセシビリティ指定の制約/練習問題
 
インデックス・ページヘ  「[完全版]究極の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 記事ランキング

本日 月間