2013-02-27 140 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