2017-02-23 10 views
0

Iは、以下のシナリオがあります。)(関数((T3)T1)を追加するために呼び出す行にアクセスできない機能誤差+仮想

public class T1 
    { 
     protected virtual int add() 
     { 
      return 1; 
     } 
    } 

    public class T2 : T1 
    {  
    } 

    public class T3 : T2 
    { 
     protected override int add() 
     { 
      return 3; 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      T1 t1 = new T3();    

      ((T3)t1).add(); 

     } 
    } 

しかし、.addと、 私はエラーT3.addを(取得していますが)、その保護レベル

+1

保護されたメソッドは、クラスまたは派生クラスの内部でのみ呼び出すことができますが、クラスの外部から呼び出しようとします。 –

答えて

1

に保護されたキーワードは、メンバーのアクセス修飾子ですMSDN

からアクセスできません。保護されたメンバは、そのクラス内および派生クラスインスタンスからアクセスできます。

別のクラスのprotectedメソッドにアクセスすることはできません。それはpublicである必要があります。

public class T1 
{ 
    public virtual int add() 
    { 
     return 1; 
    } 
} 

public class T2 : T1 
{  
} 

public class T3 : T2 
{ 
    public override int add() 
    { 
     return 3; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     T1 t1 = new T3();    

     ((T3)t1).add(); 

    } 
} 
関連する問題