Tôi có một bộ sưu tập lớn các đối tượng được tạo tự động. Mặc dù chúng là tất cả các lớp khác nhau, không liên quan, tất cả các đối tượng đều chia sẻ một số thuộc tính cơ bản (tên, id, v.v.). Tôi không kiểm soát việc tạo các đối tượng này, vì vậy rất tiếc tôi không thể thực hiện phương pháp lý tưởng để triển khai giao diện. Tôi muốn tạo ra một phương pháp mà tôi vượt qua một tùy ý của các đối tượng này và làm một cái gì đó bằng cách sử dụng các thuộc tính phổ biến này.Phương pháp xử lý các đối tượng có thuộc tính chung, nhưng các loại đối tượng khác nhau
Ý tưởng chung sẽ là một cái gì đó như:
someObj a = new someObj();
a.name = "sara";
diffObj b = new diffObj();
b.name = "joe";
string phrase = string.Format("I am with {0} and {1}",
getName(a), getName(b));
private string getName(object anyObjWithName)
{
return anyObjWithName.name;
}
mặc dù tự nhiên này không hoạt động.
Tôi nghĩ rằng một phương pháp chung có thể giữ câu trả lời, nhưng cách duy nhất tôi có thể thấy để gọi nó với loại hiện tại đang sử dụng genericMethod.Invoke
, vẫn mang cùng một vấn đề không thể giải quyết các thuộc tính của đối tượng được truyền trong phương pháp. Điều này không giống như Calling generic method with a type argument known only at execution time hoặc How to call generic method with a given Type object? trong đó chỉ có loại hoặc thuộc tính của loại, được sử dụng trong phương pháp, trái với thuộc tính của đối tượng.
Tôi biết rằng điều này sẽ (rất) dễ bị lỗi, nhưng tôi có thể đảm bảo rằng tất cả các đối tượng gặp phải sẽ có các thuộc tính chung được thao tác.
Sử dụng giao diện? – Michael
Hãy thử khai báo một giao diện để liên kết các đối tượng cho các thuộc tính chung hoặc sử dụng sự phản chiếu. – Nayan
http://msdn.microsoft.com/en-us/library/64syzecx.aspx – Crisfole