Nếu lớp học không phải là của bạn, có vẻ như API đã được cố tình viết để ngăn chặn điều này, có nghĩa là có thể cách tiếp cận của bạn không phải là ý tưởng của các nhà văn API. Hãy xem các tài liệu và xem liệu có cách tiếp cận được khuyến nghị để sử dụng lớp này hay không.
Nếu bạn do có quyền kiểm soát lớp và muốn triển khai mẫu này, khi đó nó thường được triển khai thông qua phương pháp tĩnh trên lớp. Đây cũng là một khái niệm quan trọng tạo nên mẫu Singleton.
Ví dụ:
public PrivateCtorClass
{
private PrivateCtorClass()
{
}
public static PrivateCtorClass Create()
{
return new PrivateCtorClass();
}
}
public SomeOtherClass
{
public void SomeMethod()
{
var privateCtorClass = PrivateCtorClass.Create();
}
}
Những thứ SqlCommandParameter là một ví dụ điển hình. Họ mong đợi bạn để tạo ra các thông số bằng cách gọi những thứ như thế này:
var command = IDbConnnection.CreateCommand(...);
command.Parameters.Add(command.CreateParameter(...));
Ví dụ của tôi không phải là mã tuyệt vời vì nó không chứng minh thiết lập các thuộc tham số lệnh hoặc tái sử dụng các thông số/lệnh, nhưng bạn sẽ có được ý tưởng.
Nguồn
2009-04-02 09:21:40
Một cải tiến nhỏ cho phương pháp tĩnh tiện dụng này là xây dựng các mảng kiểu tham số động – nrjohnstone
@nrjohnstone Nếu bạn có nghĩa là GetType trên mỗi phần tử mảng nó không thể trong trường hợp chung vì null. Ngoài ra nếu bạn cố gắng suy ra các loại trong trường hợp này, bạn sẽ kết thúc việc thực hiện một độ phân giải quá tải hoàn chỉnh theo ngôn ngữ của sự lựa chọn, mà không phải là tầm thường trong trường hợp của C#. –