Chr*_*ris 38 c# polymorphism constants
我下面的代码不会编译.我究竟做错了什么?我基本上试图在基类中重写一个公共常量.
public abstract class MyBaseClass
{
public abstract const string bank = "???";
}
public class SomeBankClass : MyBaseClass
{
public override const string bank = "Some Bank";
}
Run Code Online (Sandbox Code Playgroud)
一如既往地感谢您的帮助!
Pie*_*ant 46
如果你的常量描述你的对象,那么它应该是一个属性.一个常数,就其名称而言,不应该改变,并且设计为不受多态性的影响.这同样适用于静态变量.
您可以在基类中创建一个抽象属性(如果需要默认值,则为虚拟属性):
public abstract string Bank { get; }
Run Code Online (Sandbox Code Playgroud)
然后覆盖:
public override string Bank { get { return "Some bank"; } }
Run Code Online (Sandbox Code Playgroud)
Nic*_*rdi 16
你要做的事情是做不到的. static并且const不能被覆盖.只能覆盖实例属性和方法.
您可以将该bank字段转换为属性并将其作为抽象来销售,如下所示:
public abstract string Bank { get; }
Run Code Online (Sandbox Code Playgroud)
然后你将像你一直在继承的类中覆盖它
public override string Bank { get { return "Charter One"; } }
Run Code Online (Sandbox Code Playgroud)
希望这对你有所帮助.另一方面,您也可以这样做
public const string Bank = "???";
Run Code Online (Sandbox Code Playgroud)
然后继承类
public const string Bank = "Charter One";
Run Code Online (Sandbox Code Playgroud)
由于static并且const在多态性之外操作,因此不需要重写它们.
如果您想继续使用“const”,请对上述内容稍作修改:
public abstract string Bank { get; }
Run Code Online (Sandbox Code Playgroud)
然后覆盖:
private const string bank = "Some Bank";
public override string Bank { get { return bank;} }
Run Code Online (Sandbox Code Playgroud)
然后该属性将从派生类型返回您的“const”。
| 归档时间: |
|
| 查看次数: |
17528 次 |
| 最近记录: |