内部成员可以被覆盖吗?

时间:2014-10-24 18:12:42

标签: c# .net oop

假设您有以下类声明:

public abstract class Foo
{
    public class Bar
    {
        public virtual void DoSomething() { ... }
    }
}

是否可以覆盖Foo子类中的Bar.DoSomething(),la:

public class Quz : Foo
{
    public override void Bar::DoSomething() { ... }
}

显然语法不起作用,但是这样可能吗?

3 个答案:

答案 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差异。

希望这是有道理的。