Tôi có một số mã di sản với một phương pháp foo trong đó có 700 quá tải:C# không thể gọi quá tải phương pháp phi generic từ phương pháp chung
[DllImport("3rdparty.dll")]
protected static extern void foo(int len, ref structA obj);
[DllImport("3rdparty.dll")]
protected static extern void foo(int len, ref structB obj);
[DllImport("3rdparty.dll")]
protected static extern void foo(int len, ref structC obj);
//and 700 similar overloads for foo...
Tôi muốn để lộ những phương pháp quá tải qua một đơn phương pháp sử dụng Generics:
public void callFoo<T>(int len)
where T : new() //ensure an empty constructor so it can be activated
{
T obj = Activator.CreateInstance<T>(); //foo expects obj to be empty, and fills it with data
foo(len, ref obj);
//...do stuff with obj...
}
Thật không may này sẽ trả về lỗi: "các quá tải tốt nhất phù hợp với phương pháp 'foo (int, ref StructA) có một số đối số không hợp lệ" và "không thể chuyển đổi từ 'ref T' thành 'ref StructA' ".
Có cách nào thanh lịch để đạt được điều này không?
Các loại 'classA',' classB' là một phần của phân cấp lớp? Nếu vậy, bạn có thể giải thích cấu trúc? – Oded
700 quá tải? Khá lớn cho một lớp học. – TalentTuner
Uhu, 700 quá tải? Bạn có chắc chắn muốn thêm một lớp phức tạp khác vào đó không? – Makach