类中属性的顺序是否重要
本文关键字:是否 顺序 属性 | 更新日期: 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
方法。由于属性的顺序似乎发生了变化。