Tôi đã một lớp định nghĩa là:Child constructor tĩnh không được gọi là khi thành viên cơ sở truy cập
public class DatabaseEntity<T> where T : DatabaseEntity<T> {
public static string Query { get; protected set; }
public static IList<T> Load() {
return Database.Get(Query);
}
}
public class Node : DatabaseEntity<Node> {
static Node() {
Node.Query = @"SELECT Id FROM Node";
}
}
Khi tôi chạy Node.Load()
từ một codebehind (Window.xaml.cs
) constructor tĩnh của Node bao giờ cháy; hoặc ít nhất không đạt điểm ngắt và không đặt Node.Query thành bất kỳ thứ gì khác ngoài null.
Có lý do nào khiến điều này có thể xảy ra không?
Giải pháp
Kiểm tra các câu trả lời dưới đây cho một số giải pháp. Đối với trường hợp của tôi, tôi quyết định chỉ cần đặt biến số Query
là công khai và đặt tất cả các phiên bản Query
ở một nơi. (Không phải lý tưởng, nhưng nó hoạt động.)
Có phải nó đang bị hủy đăng ký qua DataContractSerializer không? Khi tôi nhớ lại DCS không kích hoạt các nhà xây dựng. – PhillipH
Tại sao không chỉ đơn giản là thực hiện truy vấn 'private const string Query = [query];'? – atlaste
Nó không phải là. Tuy nhiên, 'Load()' thực sự là một hàm tĩnh kế thừa. Điều đó có tạo nên sự khác biệt không? –