3

我有一个可以分配不同类的对象,所有这些类都有一个Position我需要访问的字段,无论对象的类型如何。Visual Studio 不会让我编译var pos = myObject.Position,因为object没有Position字段。而且我不能转换为MyClass,因为可以有几个其他类分配给该变量。

如何在Position不转换为一种类型的情况下访问该字段?

4

3 回答 3

5

最好的选择是让所有类实现一个通用接口,然后使用该接口访问属性。

但是,如果这些是您无法控制的类,则还有其他选项。您可以使用反射来访问字段/属性(通过Type.GetFieldFieldInfo.GetValue等),尽管这在运行时很慢。

如果您使用的是 C# 4 或更高版本,则可以使用dynamic

dynamic theObject = yourObject;
Point position = theObject.Position;

这将使用动态(运行时)绑定来查找Position类型上的属性或字段。

于 2012-11-16T22:12:08.467 回答
1

所有具有Position字段的不同类都应该从公共基类继承该字段,或者从公共接口获取它(它必须是一个属性)。

接口解决方案可能如下所示:

interface IHasPosition
{
  int Position { get; }
}

那么所有的类都应该说: IHasPosition,并且你的myObject变量应该IHasPosition在代码中声明为类型。

于 2012-11-16T22:14:17.900 回答
0

一旦选项是使所有不同的类都从定义的类继承,Position那么当您获取对象时,通过父类类型引用它,您可以在不知道特定类型的情况下访问在那里定义的属性。

请记住,如果它们没有太多通用功能,这可能不是一个很好的方法。

于 2012-11-16T22:12:49.463 回答