有一个抽象类和它的派生类。
我需要一个抽象类的一些属性必须идвидивидуальными
在派生类中用值初始化,这样在创建这些派生类的时候,我才不会忘记在派生类的构造函数中给这样的属性赋值。
我对抽象类的默认值不满意。
这里在派生类的例子中,C
不小心忘Prop2
了赋值。
我怎么能注意到我忘记了?
internal abstract class A
{
public string Prop1 { get; protected set; }
public string Prop2 { get; protected set; }
public A(string prop)
{
Prop1 = prop;
}
}
internal abstract class B : A
{
protected B(string prop) : base(prop)
{
Prop2 = "Значение индивидуальное для производного B класса";
}
}
internal abstract class C : A
{
protected C(string prop) : base(prop)
{
// Забыл добавить в Prop2 значение индивидуальное для производного С класса
}
}
你可以按照我在评论中写的那样做:
如果您使用的是较新版本的语言(在 C# 11 中引入了required),那么您可以这样写:
那么编译器将要求显式设置这些属性,尽管它不会理解这些属性是通过构造函数设置的。那些。在后继者中,您不能在构造函数中写入
Prop2 = "2"
。然后就创建var c = new C();
,它仍然需要var c = new C { Prop1 ..., Prop2 ... };
。编译器已检查所有字段和属性是否已在构造函数中初始化。您可以提高此消息的优先级(甚至是使用预处理器指令的此特定构造函数),以便它导致错误。
或者,您可以在抽象类的构造函数中初始化变量,如果没有将初始化值传递给构造函数,则使用将导致错误的值(尽管这将是运行时错误)。可能无法对所有数据类型执行此操作。