我在C#中继承了一些问题。我已经草拟了三个课程:A
,B
和C
。 C
继承自B
的{{1}}和B
。现在A
班级调用B
并且工作正常,但我无法从base.Method1
班级拨打A.method1
。如果我从C
致电base.Method1
,那么该方法将C
method1
。有什么建议吗?
P.S。在B
类中,有一些字段标记为私有,因此您只能访问它们
A
答案 0 :(得分:3)
无法在C#中执行此操作,认为可以通过IL执行此操作。
对于您的情况,您可以这样做:
class A
{
private int instance;
public virtual void Method1()
{
Method1Impl();
}
protected void Method1Impl()
{
}
}
现在,您可以从C级别致电A.Method1Impl
。
答案 1 :(得分:3)
这是C#的一个功能。如果您希望将此方法公开给C类,请考虑重构A,如下所示:
class A
{
private instance;
public virtual void Method1 ()
{
AMethod1();
}
protected void AMethod1()
{
instance = this;
do something;
}
}
这使您可以在C:
中调用此方法class C : B
{
public override void Method1 ()
{
AMethod1();
// do something;
}
}
答案 2 :(得分:1)
您无法使用A
直接跳至base.Method1
,因为这只是针对上述问题。但是,您可以使用受保护的委托或对A的引用来进行直接呼叫。创建受保护的字段Action _A_Method1
,并在A
的构造函数中,将其设置为Method1
(_A_Method1 = Method1
)。现在,您可以直接调用类C
(_A_Method1();
)。