Tôi đang phát triển một ứng dụng mà ở đó tôi cần gọi một phương thức của một lớp chung và tôi không quan tâm đến các thể hiện kiểu thực tế. Một cái gì đó giống như mã Java sau đây:Tương đương với các ký tự đại diện Java trong C# generics
public class Item<T>{
private T item;
public doSomething(){...}
}
...
public void processItems(Item<?>[] items){
for(Item<?> item : items)
item.doSomething();
}
Lúc đó, tôi đã giải quyết vấn đề bằng cách xác định giao diện với các phương thức tôi cần để gọi và thực hiện lớp chung.
public interface IItem
{
void doSomething();
}
public class Item<T> : IItem {
private T item;
public void doSomething(){...}
}
...
public void processItems(IItem[] items)
{
foreach(IItem item in items)
item.doSomething();
}
Cách giải quyết này hoạt động tốt, nhưng tôi muốn biết cách chính xác để đạt được hành vi tương tự.
EDIT:
tôi quên đề cập rằng người gọi của processItems
không biết các loại thực tế. Trên thực tế, ý tưởng là mảng được chuyển làm đối số cho processItems
có thể chứa các loại xen kẽ. Vì không thể có một mảng như vậy trong .Net, việc sử dụng một lớp cơ sở hoặc giao diện không chung chung có vẻ là cách duy nhất.
Blargh, một vài giây quá sớm. : P –
Vâng, đánh bại tôi quá. Bạn có thể chỉnh sửa với ví dụ về người gọi không? –
chỉ 'ProcessItems (dữ liệu); ' –