Tôi đang sử dụng Mono.Cecil để tạo một assembly có chứa một lớp dẫn xuất ghi đè một phương thức cụ thể trong một lớp cơ sở đã nhập. Phương pháp ghi đè là ghi đè 'ẩn'. Vấn đề là tôi không thể tìm ra cách chỉ định nó như là một sự ghi đè.Cách tạo phương thức ghi đè bằng Mono.Cecil?
Tôi đang sử dụng mã sau để tạo phương pháp ghi đè.
void CreateMethodOverride(TypeDefinition targetType,
TypeDefinition baseClass, string methodName, MethodInfo methodInfo)
{
// locate the matching base class method, which may
// reside in a different module
MethodDefinition baseMethod = baseClass
.Methods.First(method => method.Name.Equals(methodName));
MethodDefinition newMethod = targetType.Copy(methodInfo);
newMethod.Name = baseMethod.Name;
newMethod.Attributes = baseMethod.Attributes;
newMethod.ImplAttributes = baseMethod.ImplAttributes;
newMethod.SemanticsAttributes = baseMethod.SemanticsAttributes;
targetType.Methods.Add(newMethod);
}
Đó là sự hiểu biết của tôi rằng một override ngầm phải có chữ ký giống như phương pháp di truyền. Sử dụng mã trên, khi tôi xem phương thức kết quả trong Reflector, lớp cơ sở và các phương thức lớp dẫn xuất có cùng chữ ký chính xác, cụ thể là "public virtual void f (int param)".
tôi đã cố gắng loại bỏ các thuộc tính rõ ràng "ảo", nhưng sau đó các phương pháp có nguồn gốc kết thúc lên như "public void f (int param)'.
Làm thế nào để có được phương pháp có nguồn gốc có đúng" public override void f (int param)" chữ ký
LƯU Ý: tôi có một phương pháp khuyến nông ('TypeDefinition.Copy') mà bắt chước một MethodInfo và trả về một MethodDefinition bằng cách nhập tất cả các loại tham chiếu vv
Cảm ơn thông tin - chính xác những gì tôi cần. Vì một số lý do, tôi không nhận được thông báo qua email từ SO hoặc nhóm Mono-Cecil. Xin lỗi vì đã hỏi qua nhiều kênh! –
Không sao, chúng tôi đã tìm được giải pháp cho vấn đề của bạn! –