假设您有以下类声明:
public abstract class Foo
{
public class Bar
{
public virtual void DoSomething() { ... }
}
}
是否可以覆盖Foo子类中的Bar.DoSomething(),la:
public class Quz : Foo
{
public override void Bar::DoSomething() { ... }
}
显然语法不起作用,但是这样可能吗?
答案 0 :(得分:6)
不,但你仍然可以从Foo.Bar
类本身继承:
public class BarDerived : Foo.Bar
{
public override void DoSomething() { ... }
}
我觉得我应该解释这样做并不意味着从Foo
派生的类会突然有一个BarDerived
的内部类,它只是意味着有一个类可以从中衍生出来。有一些方法可以替换您想要用作内部类的类,例如:
public class Foo<T>
where T : Foo.Bar
{
private T _bar = new T();
public class Bar
{
public virtual void DoSomething() { ... }
}
}
public class BarDerived : Foo.Bar
{
public override void DoSomething() { ... }
}
public class Quz : Foo<BarDerived> { ... }
答案 1 :(得分:1)
不,只有你继承自Bar
public class Quz : Foo.Bar
{
public override void DoSomething() { ... }
}
答案 2 :(得分:0)
好吧,如果您遵循良好做法,那么Bar
不能由任何其他类构建,Foo
,表示启用以下内容:
在Foo::Bar
中的Quz
创建一个派生类,并覆盖它DoSomething()
覆盖Foo
中构造Bar
的每个方法,并改为派生类。
Foo
的用户不应该知道Bar
与您的新派生内部类之间的API差异。
希望这是有道理的。