Tôi có một phương pháp như sau:C# đèo Generics Tại Runtime
public IEnumerable<T> GetControls<T>()
: where T : ControlBase
{
// removed.
}
tôi sau đó tạo ra một lớp:
public class HandleBase<TOwner> : ControlBase
: TOwner
{
// Removed
}
Tôi muốn để có thể gọi
GetControls<HandleBase<this.GetType()>>;
nơi nó sẽ sử dụng loại lớp THIS để chuyển sang HandleBase. Điều này về cơ bản sẽ có được tất cả các HandleBase có một chủ sở hữu của loại này.
Tôi làm cách nào để đạt được điều này?
EDIT:
Tôi đang sử dụng .NET 2.0 để các giải pháp lớn hơn 2.0 sẽ không hoạt động.
Ý tưởng là để ControlBase có một bộ sưu tập các ControlBase khác cho "trẻ em". Sau đó, họ có thể được truy vấn dựa trên loại của họ với GetControls<T>()
. Điều này sẽ cho phép tôi, ví dụ, có được tất cả HandleBase cho một Shape. Sau đó, tôi có thể thực hiện tất cả những điều này và đặt Hiển thị = sai hoặc làm điều gì đó khác với chúng. Do đó tôi có thể điều khiển trẻ em thuộc một loại cụ thể cho một bộ sưu tập.
HandleBase<TOwner>
yêu cầu TOwner vì nó có tham chiếu đến "loại sở hữu". Vì vậy, bạn chỉ có thể thêm bất cứ điều gì kéo dài HandleBase đến một hình dạng. Có lý?
Cảm ơn tất cả trợ giúp!
@TheCloudlessSky, tại sao gọi 'this.GetType()'? nếu bạn đang gọi 'GetControls>();' từ một lớp dựa trên cá thể [như 'this' chỉ ra], tại sao không đơn giản sử dụng tên kiểu khai báo của lớp thực hiện? nếu đây là một lớp cơ sở, có nghĩa là để lộ loại của lớp con cho lớp cơ sở. –
Xem chỉnh sửa ở trên. – TheCloudlessSky