Một số vấn đề cơ bản về giá trị mặc định trong C#:
Khi một thể hiện của một lớp (hoặc cấu trúc) được tạo, tất cả các trường được khởi tạo với giá trị mặc định tương ứng của chúng.
Đối với các loại tham chiếu, nó sẽ là null
. Đối với các loại giá trị, nó sẽ tương đương với 0
. Điều này dễ dàng giải thích vì việc quản lý bộ nhớ đảm bảo rằng bộ nhớ được cấp phát mới được khởi tạo thành 0x0 byte.
Thuộc tính tự động ẩn trường được tạo nhưng có một trường. Vì vậy, các quy tắc tương tự áp dụng.
Bây giờ để trả lời câu hỏi của bạn, cách tốt nhất để đảm bảo rằng giá trị này được khởi tạo là làm cho một nhà xây dựng với một tham số cho từng lĩnh vực/tài sản và che giấu các nhà xây dựng mặc định không có tham số:
public Yourtype(String param1, Int32 param2)
{
this.Variable1 = param1;
this.Variable2 = param2;
}
private Yourtype() { }
Các lựa chọn thay thế khác được mô tả trong câu trả lời @Sean và @Alex nếu chỉ có một tập hợp con các thuộc tính/trường cần được khởi tạo/kiểm tra. Nhưng điều này ẩn một số chi phí (một bool
cho mỗi thuộc tính/trường và một số hướng dẫn).
Tôi nghĩ câu trả lời meta ở đây là "vì vậy đừng làm điều đó". Đảm bảo tất cả các biến được khởi tạo trong hàm tạo. – Martijn
Điều gì sẽ xảy ra nếu tôi có hai chức năng. F1 & F2, mỗi lần sử dụng cả hai Biến. Nhưng đối với F1 tôi phải chắc chắn rằng người gọi hàm đã đặt giá trị cho các biến, ngay cả khi các biến đó là null.Đối với F2 tôi không quan tâm, tôi không muốn ép anh ta gửi thứ gì đó trong nhà xây dựng! –
nếu cho F1 bạn cần * người gọi * để thiết lập các biến, tại sao bạn không vượt qua chúng như là đối số cho F1? – Martijn