xem xét mã C# sau:Làm thế nào để bắt hoặc cờ vấn đề tiềm ẩn do thứ tự khởi lĩnh vực tĩnh
using System;
class Program
{
static string string1 = "AAA";
static string string2 = string1 + string3;
static string string3 = "BBB";
static void Main()
{
Console.WriteLine(string2);
}
}
tôi đã viết một số mã như ngày nay trước đây và đã mong string2
để chứa các giá trị AAABBB
, nhưng thay vào đó nó chỉ chứa AAA
. Tôi đã làm một số đọc về thứ tự khởi tạo các biến tĩnh, nhưng nó có vẻ thích hợp với tôi rằng một số loại cảnh báo hoặc lỗi sẽ được tạo ra trong quá trình biên dịch.
Hai câu hỏi:
Tại sao mã như vậy cho phép để biên dịch thành công? (và nếu câu trả lời là: "bởi vì đó là cách C# spec được viết", thì tại sao nó được viết theo cách đó? Có lý do nào tôi bỏ lỡ lý do tại sao điều này không phải lúc nào cũng chỉ là một lỗi biên dịch?)
Có bất kỳ cách nào cách để nhận cảnh báo biên dịch hoặc một số loại cờ khác nếu tôi vô tình viết lại loại mã này trong tương lai không?
_ * tôi nghĩ * không có cách nào thực sự dẫn đến "" AAA "' ... sao chép/dán, chạy ... oh wow nó! Tâm thổi O_O như tôi upvote và hy vọng Skeet hoặc Lippert sẽ trả lời này_ –
Nếu đây là một vấn đề, không khởi tạo khai báo, nhưng thay vì chạy một constructor tĩnh, nơi bạn làm các bài tập. – spender
ReSharper đưa ra cảnh báo cho việc này. – cadrell0