C#中的类成员

时间:2011-11-20 10:05:35

标签: c#

对于具有默认非零值的类成员,C#的最佳做法是什么?

你可以这样写:

private int someField = 9;
public int SomeField
{
   get ( return someField; }
   set { someField = value; }
}

或者这样:

public Int32 SomeField = 9;

但Int32与int相同。

那么,哪种方式更好,可能会导致更少的问题?

4 个答案:

答案 0 :(得分:6)

只需使用C#别名,它们的读取时间较短,因此存在。

您不应将字段公开为public - 您正在以这种方式打破封装。

简而言之,请使用:

private int someField = 9;
public int SomeField
{
   get ( return someField; }
   set { someField = value; }
}

答案 1 :(得分:1)

替代@Oded提出的答案:

public int field1 { get; set; } //auto-implemented property, :)

public MyClass() {
    field1 = 9; //or other default value
}

答案 2 :(得分:0)

另请注意,如果您有多个构造函数,请不要在其声明中显式初始化字段。因为编译器生成代码来为每个构造函数初始化这些字段。对于这种情况,使用一个基本构造函数初始化您的字段并让其他构造函数调用此基本构造函数。

int field1;
int field2;
int field3;

public MyClass()
{
  field1 = 12;
  field2 = 1;
  field3 = 5;
}
public MyClass(int SomeValue) : this()
{
   field1 = SomeValue;
}

public MyClass(int SomeValue, int SomeOtherValue) : this()
{ 

   field1 = SomeValue;
   field2 = SomeOtherValue;
}

答案 3 :(得分:0)

作为最佳实践,我会避免像这样的硬编码值。以后维护它们真的很棘手。最好的办法是在集中的位置创建一个枚举列表并将它们转换为整数。这样可以更好地控制/维护。

public enum SomeFieldValue
        {
            ValueOne = 1,
            ValueTwo = 2,
            ValueThree = 3
        }

        public int MyDefaultSomeValue = (int) SomeFieldValue.ValueOne;