Hãy nói rằng tôi có một lớp (ClassA
) chứa một phương pháp trong đó kêu gọi các nhà xây dựng của lớp khác, như thế này:Tại sao tôi buộc phải tham khảo các loại trong các nhà thầu chưa sử dụng?
public class ClassA
{
public void CallClassBConstructor()
{
using(ClassB myB = new ClassB()) {...}
}
}
Lớp ClassB
trông như thế này:
public class ClassB : IDisposable
{
public ClassB(){}
public ClassB(string myString){}
public ClassB(ClassC myC){}
public void Dispose() {...}
}
... và ClassC
thậm chí còn đơn giản hơn:
public class ClassC{}
Nếu tôi đặt các lớp này vào ass của chính chúng embly và biên dịch toàn bộ giải pháp Tôi không nhận được bất kỳ lỗi nào. Nhưng nếu tôi thay thế báo cáo kết quả sử dụng với điều này:
using(ClassB myB = new ClassB("mystring")){...}
tôi nhận được một lỗi biên dịch yêu cầu tôi thêm một tham chiếu đến [mynamespace].ClassC
trong ClassA
. Vì tôi không gọi ClassB(ClassC myC)
ở tất cả điều này không có ý nghĩa với tôi - tại sao tôi phải bao gồm các loại nhà xây dựng khác bất kể tôi có sử dụng chúng hay không? Điều gì xảy ra nếu ClassC
được bao gồm trong một hội đồng được cấp phép hoặc khó khăn? Đây có phải là một ví dụ về thiết kế xấu mà các nhà phát triển nên tránh hoặc tôi thiếu một cái gì đó ở đây?
Điều này không thể biên dịch ngay từ đầu, ClassB không thực hiện IDisposable. Sau đó, nó không thể được sử dụng trong một mệnh đề sử dụng. –
Đây không phải là C/C++ khi mã không sử dụng không hợp lệ sẽ bị bỏ qua nếu các phần được gc'd bởi trình liên kết. – leppie
Tôi đã chỉnh sửa mã để biên dịch ngay bây giờ –