class 中的属性顺序重要吗?

Is order of properties in a class important?

我有以下 class:

class Foo
{
    public Foo()
    {
        Console.WriteLine("Foo");
    }

    public string A { get; set; } = GetStr("A");

    public string B { get; set; } = GetStr("B");

    public static string GetStr(string str)
    {
        Console.WriteLine(str);
        return str;
    }
}

当我从它创建一个实例时,输出是这样的:

A
B
Foo

如果我将我的属性更改为:

public string B { get; set; } = GetStr("B");

public string A { get; set; } = GetStr("A");

输出是:

B
A
Foo

我的问题是:

class 中属性的顺序是否重要并且可能会影响我的程序?

注意:我使用的是 C# 6.0 新功能:属性 初始化程序 More

字段(和 属性,自 C# 6 起)初始值设定项是 运行 首先,按照它们声明的顺序,然后执行构造函数。

是的,属性的顺序会影响它们的初始化顺序;但是构造函数总是最后执行。

属性的顺序无关紧要。您的构造函数调用 GetStr 方法,该方法将字符串写入控制台。由于属性的顺序似乎发生了变化。

根据我的经验(在 C# 中),当使用反射时,返回字段的顺序,因为它们在 class 中列出(因此它可能很重要)。

例如:

public class TestClass
{
  // purposely not in alphabetical order and of different types.
  public string C { get; set; }
  public int A { get; set; }
  public string B { get; set; }
}

然后创建实例并赋值:

TestClass testObject = new TestClass();
// purposely not in same order as in class
testObject.B = "1";
testObject.C = "2";
testObject.A = 3;

最后遍历属性:

foreach (PropertyInfo prop in typeof(TestClass).GetProperties())
{
  Console.WriteLine("{0} = {1}", prop.Name, prop.GetValue(testObject, null));
}

打印出以下内容:

C = 2

A = 3

B = 1

结果与 class 定义中的顺序相同。