Cụ thể, liên quan đến lĩnh vực initializers (trong trường hợp này, tĩnh) - §17.11 trong ECMA 334:"Thứ tự văn bản" trên các lớp một phần có được định nghĩa chính thức không?
Nếu một lớp có chứa bất kỳ lĩnh vực tĩnh với initializers, những initializers được thực hiện theo thứ tự văn bản ngay trước khi thực hiện constructor tĩnh.
Bây giờ, nếu chúng tôi có nhiều lớp partial
trong các tệp riêng biệt, đơn đặt hàng đó có được xác định ở bất kỳ đâu không? Ruột của tôi nói "không chính thức được xác định, nhưng có lẽ liên quan đến thứ tự bao gồm trong csproj, hoặc thứ tự ghi chú đến csc". Điều này có đúng không?
(và có, tôi nhận ra sẽ tốt hơn nếu tránh sự mơ hồ hoàn toàn - có thể bằng cách di chuyển tất cả khởi tạo sang một hàm tạo tĩnh).
Ví dụ, nếu tôi có a.cs
:
using System;
partial class Program
{
private static int Foo = Write("Foo");
static int Write(string name)
{
Console.WriteLine(name);
return 0;
}
static void Main()
{
Console.WriteLine("[press any key]");
Console.ReadLine();
}
}
và b.cs
:
partial class Program
{
private static int Bar = Write("Bar");
}
và:
<Compile Include="a.cs" />
<Compile Include="b.cs" />
thì đây là Foo
sau đó Bar
; nếu, tuy nhiên, đây là:
<Compile Include="b.cs" />
<Compile Include="a.cs" />
sau đó nó là Bar
sau đó Foo
. Điều này hỗ trợ quan sát, nhưng không nói rõ. §8.7.13 (khai báo kiểu một phần) không đưa ra nhận xét về thứ tự khi kết hợp các lớp partial
. Vì thế; Có điều gì mạnh mẽ hơn chúng ta có thể nói ở đây, hoặc từ thông số ngôn ngữ C# hoặc từ tài liệu hướng dẫn sử dụng?
Ngoài ra, nó hoạt động tương tự với csc a.cs b.cs
so với csc b.cs a.cs
.
câu hỏi rất hay –