强制初始化所有类字段

时间:2013-06-25 11:41:24

标签: c# class initialization field

与c#中的struct类似,其中的所有字段必须在编译时初始化,我很想知道是否有某种方法可以强制程序员初始化{{1}中的所有字段编译代码时有指示(错误)。

祝你有个美好的一天, 感谢。

3 个答案:

答案 0 :(得分:3)

最简单的方法是提供一个构造函数,它接受你想要初始化的字段 - 例如

public  class MyClass
{
     public string MyValue { get; set; }

     public MyClass(string myValue)
     {
         MyValue = myValue;
     }
}

答案 1 :(得分:3)

提供一个将所有属性作为参数的构造函数,如NDJ所说,是个好主意。

如果您在添加新属性后忘记更新构造函数时确实希望收到警告或编译错误,可以构建自定义代码分析规则(使用FxCop SDK)并检查每个setter在类构造函数中调用公共属性。

答案 2 :(得分:2)

我真的无法明白这一点,但是:

您已经指出结构强制执行此操作。因此,您可以通过将所有类的字段放在结构中来执行您想要的操作。然后,如果向结构添加一个新字段,它将强制您将字段初始化添加到结构体的构造函数中。

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

这并不是你想要的所有 - 因为你仍然可以在结构之外添加一个字段。所以我想它并没有真正帮助很多......