c# - 内部类的成员可以被覆盖吗?

标签 c# .net oop

假设您有以下类声明:

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

是否可以在 Foo 的子类中重写 Bar.DoSomething(),a la:

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> { ... }

关于c# - 内部类的成员可以被覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26553820/

相关文章:

c++ - 未定义基类,但包含其 header

php - 如何使用依赖注入(inject)来包装 League Flysystem

c++ - 一种克服对象切片的方法

c# - 最快的类型比较?

c# - 当用户输入是字符串并且它应该是 int.tryparse 的整数时,如何阻止 c# 崩溃?

c# - EDI 文件到管道分隔的平面文件

c# - 代码剖析 ASP.NET MVC2 应用程序

c# - 如何确定为接口(interface)的不同实现调用哪个存储库?

c# - 从不同的 Controller 直接调用 ASP.NET Controller 操作

asp.net - 使用 ASP.NET MVC 6 在 Web.config 中设置 IIS 设置