1

structc# 类似,其中的所有字段都必须在编译时进行初始化,我很想知道是否有某种方法可以让程序员在编译代码时有义务初始化 a 中的所有字段class并指示(错误) .

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

4

3 回答 3

3

最简单的方法是提供一个构造函数来获取您要初始化的字段 - 例如

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

     public MyClass(string myValue)
     {
         MyValue = myValue;
     }
}
于 2013-06-25T11:42:38.673 回答
3

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

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

于 2013-06-25T11:56:30.497 回答
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;
}

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

于 2013-06-25T11:56:56.457 回答