类中属性的顺序是否重要

本文关键字:是否 顺序 属性 | 更新日期: 2023-09-27 18:37:15

我有以下类:

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 傅

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

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

输出为:

B
A

我的问题是:

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

注意:我使用 C# 6.0 新功能:属性初始值设定项 更多

类中属性的顺序是否重要

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

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

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

例如:

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

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

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