【发布时间】:2020-06-08 11:24:39
【问题描述】:
public class A2
{
protected virtual void f() {Console.WriteLine("from A2");}
protected virtual void g() {Console.WriteLine("From A2");}
protected virtual void h1() {Console.WriteLine("from A2");}
}
public class B2
{
protected virtual void f() {Console.WriteLine("B2");}
protected virtual void g() {Console.WriteLine("B2");}
protected virtual void h2() {Console.WriteLine("B2");}
}
给出上面的代码,我试图通过创建一个新类来继承这两个类的所有功能,如下所示:
public class C2
{
private A2 a2 = new A2();
private B2 b2 = new B2();
public void f()
{
a2.f();
}
public void h1()
{
a2.h1();
}
public void g()
{
b2.g();
}
public void h2()
{
b2.h2();
}
static public void Main()
{
C2 n = new C2();
n.f();
n.g();
n.h1();
n.h2();
}
}
但是,当我尝试编译程序时,我遇到了一个错误,即我无法访问受保护的方法。
如何在不修改 A2 和 B2 类的情况下继承所有功能?
【问题讨论】:
-
这不是继承,而是将 A2 和 B2 作为依赖项。非常不一样。由于成员标记为
protected,因此无法从类外部或从其继承的类访问它们。 -
您可以创建一个继承自
A2的包装类,然后提供new方法传递到基本实现,将受保护的方法公开为公共方法。 -
C# 不支持多重继承,除非您从类派生,否则您无法访问
protected字段。您必须将它们公开或编写一个暴露它们的包装器。 -
@RufusL 你应该提到我们在C#中使用接口来实现多类继承
标签: c#