C#可以覆盖派生类的返回类型吗?

Bri*_*nes -3 c# inheritance overriding

class base{
    ....
    public string name();
    ....
}

class deriveda : base{
    ....
    public override string name();
    ....
}

class derivedb : base{
    ....
    public override string name();
    ....
}

class derivedc : base{
    ....
    public override foo name();
    ....
}
Run Code Online (Sandbox Code Playgroud)

在我的大多数派生类中,它是一致的,但其中一个我想返回一个自定义类类型,这可能吗?

Ofi*_*ten 5

简短的回答是否定的.

想一想,以后你将如何使用它?

base b = new derivedc ()
Run Code Online (Sandbox Code Playgroud)

然后?什么是返回类型b.name()stringfoo

但是你可以使用泛型来控制它(虽然我不确定它是否适合你的用例):

class base<T>{
    ....
    public virtual T name();
    ....
}

class deriveda : base<string>{
    ....
    public override string name();
    ....
}

class derivedb : base<string>{
    ....
    public override string name();
    ....
}

class derivedc : base<foo>{
    ....
    public override foo name();
    ....
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:基类中的名称必须标记为虚拟.否则,从一般意义上讲,这段代码对提问者的具体情况一无所知. (2认同)