【发布时间】:2013-06-25 11:41:23
【问题描述】:
类似于c#中的struct,其中的所有字段都必须在编译时进行初始化,我很想知道是否有某种方法可以让程序员初始化class中的所有字段并编译代码时有指示(错误)。
祝你有美好的一天, 谢谢。
【问题讨论】:
标签: c# class initialization field
类似于c#中的struct,其中的所有字段都必须在编译时进行初始化,我很想知道是否有某种方法可以让程序员初始化class中的所有字段并编译代码时有指示(错误)。
祝你有美好的一天, 谢谢。
【问题讨论】:
标签: c# class initialization field
正如 NDJ 所说,提供一个将所有属性作为参数的构造函数是个好主意。
如果您真的想在编译时收到警告或错误,以防在添加新属性后忘记更新构造函数,您可以构建自定义代码分析规则(使用 FxCop SDK)并检查每个 setter在类构造函数中调用公共属性。
【讨论】:
最简单的方法是提供一个构造函数来获取您要初始化的字段 - 例如
public class MyClass
{
public string MyValue { get; set; }
public MyClass(string myValue)
{
MyValue = myValue;
}
}
【讨论】:
我真的看不出这有什么意义,但是:
您已经指出结构强制执行此操作。因此,您可以通过将所有类的字段放在一个结构中来做您想做的事情。然后,如果您向结构添加新字段,它将强制您将字段初始化添加到结构的构造函数中。
class Test
{
public Test(int x, string y)
{
fields = new Fields(x, y);
}
public int X
{
get
{
return fields.X;
}
set
{
fields.X = value;
}
}
public string Y
{
get
{
return fields.Y;
}
set
{
fields.Y = value;
}
}
struct Fields
{
public Fields(int x, string y)
{
X = x;
Y = y;
}
public int X;
public string Y;
// Uncomment this and you get an error:
// public double Z;
}
Fields fields;
}
这并不是你真正想要的——因为你仍然可以在结构之外添加一个字段。所以我想它并没有太大帮助......
【讨论】: