是否可以重写内部类的成员
本文关键字:成员 内部类 重写 是否 | 更新日期: 2023-09-27 18:27:41
假设您有以下类声明:
public abstract class Foo
{
public class Bar
{
public virtual void DoSomething() { ... }
}
}
是否可以覆盖Foo的子类(la:)中的Bar.DoSomething()
public class Quz : Foo
{
public override void Bar::DoSomething() { ... }
}
显然,这种语法不起作用,但这样的事情可能吗?
否,但您仍然可以从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> { ... }
否,仅当您从Bar
继承时
public class Quz : Foo.Bar
{
public override void DoSomething() { ... }
}
好吧,如果你遵循良好的实践,那么Bar
不能由除Foo
之外的任何其他类构建,也就是说,它可以实现以下功能:
在Quz
中从Foo::Bar
创建派生类,并覆盖它的DoSomething()
重写Foo
中构造Bar
的每个方法,并提供派生类。
CCD_ 12的用户不应该知道CCD_。
希望这是有道理的。