是否可以重写内部类的成员

本文关键字:成员 内部类 重写 是否 | 更新日期: 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_。

希望这是有道理的。