有没有办法让派生类覆盖基类的默认值?在下面的例子中,我需要Hammer.Name返回"Hammer".
public class ItemBase
{
public string Name = "Base";
}
public class Hammer: ItemBase
{
new public string Name = "Hammer";
}
public class Test
{
ItemBase MyThing = new Hammer();
// Prints "Base"
Console.WriteLine(ItemBase.Name);
}
Run Code Online (Sandbox Code Playgroud)
您不需要不同的字段,需要对同一字段进行不同的初始化.
class Base {
protected string name = "";
public Base() { name = "X"};
}
class Derived : Base {
public Derived() { name = "Y"}; //same {name } field of a Base class
}
Run Code Online (Sandbox Code Playgroud)
您可能会考虑使用虚拟属性而不是公开公共字段(这被认为是不好的做法)。
因此,您可以(使用 C# 6.0):
void Main()
{
ItemBase myThing = new Hammer();
// Doesn't print "Base"
Console.WriteLine(myThing.Name);
}
public class ItemBase
{
public virtual string Name { get; } = "Base";
}
public class Hammer : ItemBase
{
public override string Name { get; } = "Hammer";
}
Run Code Online (Sandbox Code Playgroud)
或者(如果您使用的是旧版本的 C#)...
public class ItemBase
{
public virtual string Name { get { return "Base"; } }
}
public class Hammer : ItemBase
{
public override string Name { get { return "Hammer"; } }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |