【发布时间】:2013-08-14 06:36:07
【问题描述】:
我有大量自动生成的对象。尽管它们都是不同的、不相关的类,但所有对象都共享一些基本属性(名称、id 等)。 我不控制这些对象的生成,所以很遗憾,我无法采用理想的方法来实现接口。我想创建一个方法,在该方法中我可以传递这些对象中的任意一个并执行某些操作使用这些通用属性。
一般的想法是这样的:
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;
}
虽然这自然是行不通的。
我认为一个泛型方法可能有答案,但我能看到用当前类型调用它的唯一方法是使用 genericMethod.Invoke ,它仍然存在无法解析传递的属性的相同问题方法中的对象。这与 Calling generic method with a type argument known only at execution time 或 How to call generic method with a given Type object? 不同,后者在方法中仅使用类型或类型的属性,而不是对象的属性。
我知道这会(非常)容易出错,但我可以保证遇到的所有对象都将具有被操作的公共属性。
【问题讨论】:
-
尝试声明一个接口来关联对象的公共属性,或者使用反射。
-
啊,也许我需要更清楚一点。由于我的对象的生成方式,我无法使用良好的 OOP 实践并实现接口。不幸的是,我无法控制这个过程。