Gần đây tôi đã nhận thấy một số hành vi với Visual Studio Designer (C#) mà tôi không hiểu và đã tự hỏi nếu ai đó có thể làm rõ ...Tại sao Visual Studio IDE đôi khi khởi tạo đối tượng "this.components" và lần khác không?
Một số Windows Forms của tôi, dòng đầu tiên của nhà thiết kế tạo ra mã đọc;
this.components = new System.ComponentModel.Container();
Khi điều này là trường hợp, các phương pháp xử lý, trong đó cùng một tập tin thiết kế, các dispose phương thức đặt hai cuộc gọi "Vứt bỏ" trong trường hợp "nếu" điều kiện như sau;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
base.Dispose(disposing);
}
}
tức là Không có gì được gọi trừ khi xử lý đúng, VÀ các thành phần không phải là rỗng.
Trên một số biểu mẫu khác, dòng đầu tiên trong mã do nhà thiết kế tạo bị thiếu. Trong những trường hợp này, lệnh gọi cơ bản.Dispose nằm ngoài điều kiện "if" như vậy ...
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Tôi đã nhận thấy điều này trong khi theo dõi lỗi có biểu mẫu không đóng, trong đó this.components rỗng, cuộc gọi base.Dispose là bên trong tình trạng đó (tôi nghi ngờ mã thiết kế đã bị giả mạo nhưng đó là một câu chuyện khác.
gì kiểm soát hành vi này?
(một số hình thức trước đó trong dự án đã được tạo ra trong VS 2005 và bây giờ chúng ta sử dụng VS 2008 - đầu mối?)
Cảm ơn nobugz. Tôi đã có một cơ hội để thử kịch bản này trong VS2005 bây giờ quá. Tốt rồi. Tôi chỉ có thể giả định, như bạn nói, đây là "tự gây ra". –
"hiện không có lời gọi hàm tạo". Vì vậy, những gì các điểm trong '(thành phần! = Null)' kiểm tra nếu không có 'thành phần' khởi tạo bất cứ nơi nào nào? Ai, khi nào và ở đâu khởi tạo 'thành phần'? BTW, đến đây từ VS2010, .NET4.0 – Fulproof
Bạn dường như có một câu hỏi mới. Bạn có thể yêu cầu bằng cách nhấp vào nút Hỏi câu hỏi. –