|
|
連載:[完全版]究極のC#プログラミング
Chapter9 プロパティとアクセシビリティ
川俣 晶
2009/11/30 |
|
|
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 」(この行をマウスで選択してください)
Insider.NET 記事ランキング
本日
月間