当它可以是几种类型时,如何访问某个“对象”字段而不将其转换为一种类型?

时间:2012-11-16 22:10:26

标签: c# object casting type-conversion

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

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

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

答案 1 :(得分:1)

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

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

interface IHasPosition
{
  int Position { get; }
}

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

答案 2 :(得分:0)

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

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

相关问题