2017-01-24 5 views
0

で保護されたメンバーにアクセスするには?どのように私は2クラスが継承したクラス

+6

あなたはFUL –

+0

あなたがいない、クラスの外で、唯一の全クラスでこのプロパティにアクセスすることができますように完全なリファレンスを通して、あなたの全クラスでのJobNameにアクセスすることはできませんが。 "保護された文字列Job {get {return this.JobName;}}"をFullクラスに追加すると、Fullクラス以外でも使用できます。 – Julo

+0

いいえ私はAcces JobNameに応募できませんIdしかし私は –

答えて

5

クラスの外部から保護されたメソッドにアクセスしようとしているためです。パブリックメソッドのみが使用できます。あなただけの継承されたクラスではなく、外側のコードから、保護されたプロパティ/可変/メソッドにアクセスすることができます。

public class Full: Access.Job 
{ 
    public void mVoid() 
    { 
     Console.WriteLine(this.JobName); 
    } 

    protected void mProtVoid() 
    { 
     Console.WriteLine(this.JobName); 
    } 

    private void mPrivateVoid() 
    { 
     Console.WriteLine("Hey"); 
    } 
} 

Full myFull = new Full(); 
myFull.mVoid(); //will work 
myFull.mProtVoid(); //Will not work 
myFull.mPrivateVoid(); //Will not work 

あなたが保護されたプロパティを取得する必要がある場合は、2つの方法(3実際には、そこにありますしかし、リフレクション)は汚い方法であり、避けるべきである。

1.それはpublicに設定されている場合、それは

公共、それはSTIL継承され、あなたが直接それにアクセスできることを確認します
Full nFull = new Full(); 
Console.Write(nFull.JobName); 

2.「ラッパー」/「ファサード」

を作るだけで隠されたプロパティにアクセスし、必要な形式でそれを返すよう、新しいプロパティやメソッドを作成します。

public class Full: Access.Job 
{ 
    public string WrappedJobName { get { return this.JobName; } } 
    public string WrappedJobName => this.JobName; //C# 6.0 syntax 
} 

Full mFull = new Full(); 
Console.WriteLine(mFull.WrappedJobName); 
+0

その罰金が保護されているのは、そのクラスから継承する作業だけです。ここで私が作成するフルmyFull =新しいフル(); myFull.JobName --->なぜ動作しないのですか –

+2

@MdDastageerJob Tatranskymedvedはなぜそれがうまくいかないのか、少し読んで –

+0

あなたは新しいインスタンスを作成しているから - あなたはオブジェクトの隣に座っています。メソッドとプロパティ。保護された/私的な方法にアクセスしようとすると、あなたは許可されません。彼らは保護されている/プライベートなので。言語の定義。 http://stackoverflow.com/questions/614818/what-is-the-difference-between-public-private-protected-and-nothing – Tatranskymedved

関連する問題