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 定义中的顺序相同。
我有以下 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 定义中的顺序相同。