2013-02-27 104 views
0

我有這樣的:類派生和無障礙

class Class1 
{...} 

public class Class2 : Class1 
{ 
    public void myMethod(){}; 
} 


var sth = new Class2(); 

現在,我想做sth.myMethod(),但該方法是無法訪問的,爲什麼呢?如何解決這個問題? (我不想通過公開使Class1修復)

+0

這[文章](http://stackoverflow.com/questions/6043121/derived-class-accessibility?rq=1)包含相關信息的問題。 – SMT 2013-02-27 19:33:00

+2

如果您希望它的子類是公共的,您將不得不公開基類。 – 2013-02-27 19:34:17

回答

5

這是不允許的。編譯器會給出如下錯誤:

可訪問性不一致:基類的YourNamespace.Class1「比類較少訪問「YourNamespace.Class2」

你不能繼承從類與您要暴露的課程相比,具有更低的可訪問性。

這種情況下最好的選擇是使用組合而不是繼承。

public class Class2 
{ 
    private Class1 class1 = new Class1(); // Create an instance instead of inheriting... 

    public void MyMethod() 
    { 
    } 
} 
+0

好的,謝謝你的信息。 :) – ojek 2013-02-27 19:35:07