gpt4 book ai didi

c# - 如何强制派生类包含具有默认值的某些属性

转载 作者:太空狗 更新时间:2023-10-29 18:14:28 25 4
gpt4 key购买 nike

我有一个角色扮演游戏的类结构,看起来像这样......

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; }
}

基本上,我试图强制每个派生类型都包含一个“名称”属性。这是最好的方法吗?我知道我可以从 Item.Name 中删除“抽象”,然后删除盔甲和 Helm 中覆盖的“名称”属性。如果这样做,代码看起来会更简洁一些,但我可能会忘记在这些派生类中设置 base.Name。

有人可以帮我看看最好的方法吗?

编辑:对不起,让我再澄清一下我的问题。我想确定两件事。1) Name属性存在于所有的派生类中2) Name属性不为null或为空

我基本上想强制派生自 Item 的任何类(并且不是抽象的)具有 Name 的值。

最佳答案

听起来您很担心初始化属性?

but I might forget to set the base.Name in these derived classes.

强制设置 Name 属性的一种方法是将此 setter 包含在基类构造函数中,如下所示:

public class MyBaseClass
{
private string _name;

public MyBaseClass(string name)
{
_name = name;
}
}

然后派生自 MyBaseClass 的所有内容都必须满足该构造函数:

public class MyDerivedClass
{
public MyDerivedClass(string name) : base(name)
{

}
}

然后你也可以使属性:

  • 抽象以确保它存在于每个派生类中并具有自己的实现
  • 虚拟以提供基本实现并覆盖所有它。

我不打算冒险以上是否是好的设计,但它可以确保所有派生类在实例化时都具有有效的名称属性。

另一种方法,正如其他答案所建议的那样,是实现一个在其基本实现中抛出异常的虚拟属性。

关于c# - 如何强制派生类包含具有默认值的某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2158028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com