mik*_*dev 8 c# abstract-class derived-class
我有一个角色扮演游戏的类结构,看起来像这样......
public abstract class Item
{
public abstract string Name { get; set; }
}
public abstract class Armor : Item
{
public override string Name { get; set; }
}
public class Helmet : Armor
{
public override string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
基本上,我试图强制每个派生类型包含"名称"属性.这是最好的方法吗?我知道我可以从Item.Name中删除"abstract",然后删除Armor和Helmet中的重写"Name"属性.如果我这样做,代码看起来有点干净,但我可能忘记在这些派生类中设置base.Name.
有人可以帮我告诉我最好的方法吗?
编辑:对不起,让我再澄清一下我的问题.我想确定两件事.1)Name属性存在于所有派生类中2)Name属性不为null或为空
我基本上想强制任何派生自Item(并且不是抽象)的类具有Name的值.
听起来你担心初始化属性?
但我可能忘记在这些派生类中设置base.Name.
可以强制设置Name属性的一种方法是在基类构造函数中包含此setter,如下所示:
public class MyBaseClass
{
private string _name;
public MyBaseClass(string name)
{
_name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,从MyBaseClass派生的所有内容都必须满足该构造函数:
public class MyDerivedClass
{
public MyDerivedClass(string name) : base(name)
{
}
}
Run Code Online (Sandbox Code Playgroud)
然后你也可以制作酒店:
我不打算冒险上面是否是好的设计,但它可以确保所有派生类在实例化时具有有效的name属性.
正如其他答案所暗示的,另一种方法是实现在其基本实现中抛出异常的虚拟属性.