这是我正在尝试编写的结构:
public struct AttackTraits
{
public AttackTraits(double probability, int damage, float distance)
{
Probability = probability;
Distance = distance;
Damage = damage;
}
private double probability;
public double Probability
{
get
{
return probability;
}
set
{
if (value > 1 || value < 0)
{
throw new ArgumentOutOfRangeException("Probability values must be in the range [0, 1]");
}
probability = value;
}
}
public int Damage { get; set; }
public float Distance { get; set; }
}
这会导致以下编译错误:
无法使用“this”对象
在其所有字段都被分配之前
到
字段“AttackTraits.probability”必须
在控制之前被完全分配
返回给调用者
自动支持字段
已实施的财产
“AttackTraits.Damage”必须完全
在控制权返回之前分配
呼叫者,召集者。考虑致电
来自构造函数的默认构造函数
初始化程序。
自动支持字段
已实施的财产
“AttackTraits.Distance”必须完全
在控制权返回之前分配
呼叫者,召集者。考虑致电
来自构造函数的默认构造函数
初始化程序。
我究竟做错了什么?
如果您在具有自动属性的结构上看到此错误,只需从参数化构造函数中调用无参数构造函数即可: this()
下面的例子:
struct MyStruct
{
public int SomeProp { get; set; }
public MyStruct(int someVal) : this()
{
this.SomeProp = someVal;
}
}
通过从构造函数声明中调用 :this(),您可以让 ValueType 基类初始化自动属性的所有支持字段。我们无法在构造函数上手动执行此操作,因为我们无权访问自动属性的支持字段。
ValueType 是所有结构的基类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)