C# partial 类: 非静态字段初始化是否在构造函数之前执行?
C# partial classes: are non-static field initializations across executed before the constructor?
类似问题的许多答案似乎总是关于静态 classes。这是关于实例字段的。
假设我有这个
// File.cs
public partial class Stuff
{
public Stuff()
{
obj.DoSomething();
}
}
// OtherFile.cs
public partial class Stuff
{
MyObject obj = new MyObject("test");
}
这能保证安全吗?好像不会,比如说字段初始化和运行构造函数在一个class,然后在另一部分做字段初始化?
C# 语言是否保证这始终是安全的?
注:Is the "textual order" across partial classes formally defined?不回答问题。当前问题的答案给出了不属于此类问题的答案。它不应 link 作为此特定 link 的副本编辑。
是的,因为部分class仍然被编译成一个class。 partial
语法功能只允许您将 class 的定义拆分为多个文件。就编译类型而言,没有“部分”。
所以关于静态和非静态构造函数、初始化器等的所有顺序仍然有效。
类似问题的许多答案似乎总是关于静态 classes。这是关于实例字段的。
假设我有这个
// File.cs
public partial class Stuff
{
public Stuff()
{
obj.DoSomething();
}
}
// OtherFile.cs
public partial class Stuff
{
MyObject obj = new MyObject("test");
}
这能保证安全吗?好像不会,比如说字段初始化和运行构造函数在一个class,然后在另一部分做字段初始化?
C# 语言是否保证这始终是安全的?
注:Is the "textual order" across partial classes formally defined?不回答问题。当前问题的答案给出了不属于此类问题的答案。它不应 link 作为此特定 link 的副本编辑。
是的,因为部分class仍然被编译成一个class。 partial
语法功能只允许您将 class 的定义拆分为多个文件。就编译类型而言,没有“部分”。
所以关于静态和非静态构造函数、初始化器等的所有顺序仍然有效。