Lớp tĩnh nào khởi tạo đầu tiên nếu chúng ta có thêm một lớp tĩnh trong dự án của chúng ta?Lớp tĩnh nào khởi tạo trước tiên?
Ví dụ: Mã bên dưới cung cấp ngoại lệ cho null.
class Program
{
static void Main(string[] args)
{
First.Write();
Second.Write();
}
}
static class First
{
public static int[] firstArray = new int[20];
public static int[] secondArray = Second.secondArray;
public static void Write()
{
Console.WriteLine(firstArray.ToString());
Console.WriteLine(secondArray.ToString());
}
}
static class Second
{
public static int[] firstArray = First.firstArray;
public static int[] secondArray = new int[30];
public static void Write()
{
Console.WriteLine(firstArray.ToString());
Console.WriteLine(secondArray.ToString());
}
}
Nếu bạn chú ý, bạn sẽ thấy rằng nếu First
lớp sẽ khởi tạo bản thân để secondArray
lĩnh vực Second
sẽ là null. Nhưng nếu Second
lớp sẽ khởi tạo trước tiên thì Second
lớp firstArray
sẽ là rỗng. Tôi đang cố gắng để nói rằng khởi tạo đầu tiên làm cho kết quả khác nhau.
Tôi nghĩ rằng đó là câu hỏi trừu tượng về dự án của tôi. Tôi gặp nó trong khi cố gắng hiểu tại sao tôi lại nhận được kết quả bất ngờ.
Liệu bảo lãnh tiêu chuẩn thứ tự này? Đoán của tôi là mỗi lớp khởi tạo ở một số không xác định trước khi truy cập đầu tiên, mà biến điều này thành một chu kỳ phụ thuộc được giải quyết ngẫu nhiên. –
@Tim: Tôi đã cập nhật câu trả lời của mình - không có nhà thầu tĩnh, thứ tự thực sự không được xác định. –
Với trình gỡ rối gắn liền với VS2005, một điều xấu xảy ra - 'Second.firstArray' được đặt thành' null' – AakashM