Tôi đang gặp sự cố khi tạo tập hợp đại biểu bằng cách sử dụng phản chiếu và Generics.Delegate.CreateDelegate() và generics: Lỗi ràng buộc với phương pháp nhắm mục tiêu
Tôi đang cố tạo bộ sưu tập đại biểu từ phương thức Ally, có chia sẻ chữ ký phương thức chung.
public class Classy
{
public string FirstMethod<T1, T2>(string id, Func<T1, int, IEnumerable<T2>> del);
public string SecondMethod<T1, T2>(string id, Func<T1, int, IEnumerable<T2>> del);
public string ThirdMethod<T1, T2>(string id, Func<T1, int, IEnumerable<T2>> del);
// And so on...
}
Và Generics nấu:
// This is the Classy's shared method signature
public delegate string classyDelegate<out T1, in T2>(string id, Func<T1, int, IEnumerable<T2>> filter);
// And the linq-way to get the collection of delegates from Classy
(
from method in typeof(Classy).GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.NonPublic)
let delegateType = typeof(classyDelegate<,>)
select Delegate.CreateDelegate(delegateType, method)
).ToList();
Nhưng Delegate.CreateDelegate(delegateType, method)
ném một ArgumentException nói Lỗi ràng buộc để nhắm mục tiêu phương pháp. :/
Tôi đang làm gì sai?
Xin chào Driis! cảm ơn bạn đã trả lời. Bạn có ý nghĩa gì với 'Bạn không thể khai báo phương sai trên chữ ký phương thức'? – SDReyes
Anh ấy có nghĩa là từ khóa 'out' và' in' trên các đối số chung của bạn. – gix
Tôi có nghĩa là bạn không thể có và sửa đổi trên chữ ký phương thức của bạn trong lớp học. Bạn chỉ có thể có chúng trên các khai báo ủy nhiệm và giao diện. – driis