我有一个可以分配不同类的对象,所有这些类都有一个Position
我需要访问的字段,无论对象的类型如何。Visual Studio 不会让我编译var pos = myObject.Position
,因为object
没有Position
字段。而且我不能转换为MyClass
,因为可以有几个其他类分配给该变量。
如何在Position
不转换为一种类型的情况下访问该字段?
我有一个可以分配不同类的对象,所有这些类都有一个Position
我需要访问的字段,无论对象的类型如何。Visual Studio 不会让我编译var pos = myObject.Position
,因为object
没有Position
字段。而且我不能转换为MyClass
,因为可以有几个其他类分配给该变量。
如何在Position
不转换为一种类型的情况下访问该字段?
最好的选择是让所有类实现一个通用接口,然后使用该接口访问属性。
但是,如果这些是您无法控制的类,则还有其他选项。您可以使用反射来访问字段/属性(通过Type.GetField和FieldInfo.GetValue等),尽管这在运行时很慢。
如果您使用的是 C# 4 或更高版本,则可以使用dynamic
:
dynamic theObject = yourObject;
Point position = theObject.Position;
这将使用动态(运行时)绑定来查找Position
类型上的属性或字段。
所有具有Position
字段的不同类都应该从公共基类继承该字段,或者从公共接口获取它(它必须是一个属性)。
接口解决方案可能如下所示:
interface IHasPosition
{
int Position { get; }
}
那么所有的类都应该说: IHasPosition
,并且你的myObject
变量应该IHasPosition
在代码中声明为类型。
一旦选项是使所有不同的类都从定义的类继承,Position
那么当您获取对象时,通过父类类型引用它,您可以在不知道特定类型的情况下访问在那里定义的属性。
请记住,如果它们没有太多通用功能,这可能不是一个很好的方法。