2016-09-12 4 views
0

どのようにしてabtsractクラスの保護されたメンバーにアクセスできますか?私は抽象クラスメンバーは保護レベルのためにアクセスできない

public abstract class BaseClass 
{ 
    private int index ; 

    protected int GetIndex 
    { 
     get { return index ;} 
     set { index = value; } 
    } 
} 

public class MyClass : BaseClass 
{ 
    ... 
} 

public class TestClass 
{ 
    var data = new MyClass() 
    var index = data.GetIndex; 
} 

以下のように定義されたクラスのライン

var index = data.GetIndex; 

にアクセスできない原因は、それが保護レベルだと文句を言いあるとします。 TestClassでMyClassのGetIndexプロパティにアクセスするにはどうすればよいですか?

-Alan-

+0

を? – Maxim

+0

これは保護された識別子の重要な使用ではありません。 –

+0

保護されたメンバーがクラス/派生クラスのメンバーの外でアクセスできると思われるのはなぜですか?あなたが達成しようとしていることは非常に不明です。 –

答えて

4

あなたの問題はがために使用されることを意味しているまさにで保護されています。

それはは、基本クラスまたはサブクラスのから使用されているからフィールド/メソッドを保護します。 TestClassはBaseClassまたはMyClassから派生していません。あなたはGetIndexに行くことができません。それはそれと同じくらい簡単です。

このように、あなたのオプションのスペースがある:

  1. を提供
  2. BaseClassの上を保護 を交換しBaseClassの から派生する/設定変更TestClassをプロパティ
  3. ことを取得するために、MyClassの手段

このリストに特定の順序はありません。しかし明らかに、オプション3はここでは「最悪の」選択肢である。

+0

ポイント3は、この文脈では示唆される価値がありません。 –

+0

ユニットテストディレクトリの特定のテストクラスであれば...多分。 – GhostCat

1

使用この:

public abstract class BaseClass 
{ 
    public int GetIndex { get; private set; } 

    public BaseClass() { GetIndex = 0; } 
} 

次にあなたがのみBaseClassの中GetIndex(あなたveriable インデックスがプライベートである)、または設定することができます。それは、パブリックまたは内部または反射を使用してください

public abstract class BaseClass 
{ 
    private int index; 

    public int GetIndex 
    { 
     get { return index; } 
     protected set { index = value; } 
    } 
} 
関連する問題