2017-02-23 49 views
0

我有以下情形:不可訪問的功能誤差+虛擬

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(); 

     } 
    } 

然而,在調用來添加功能((T3)T1)的線。新增(); 我是得到錯誤T3.add()無法訪問由於其保護級別

+1

您可以只在類或派生類內部調用protected方法,但您嘗試從類外部調用它。 –

回答

1

MSDN

protected關鍵字是一個成員訪問修飾符。受保護的成員可以在其類和派生類實例中訪問。

您不能從另一個類訪問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(); 

    } 
}