繁体   English   中英

当它可以是多种类型时,如何在不将其转换为一种类型的情况下访问“对象”的特定字段?

[英]How do I access a certain field of 'object' without casting it to one type when it can be several types?

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

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

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

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

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

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

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

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

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

interface IHasPosition
{
  int Position { get; }
}

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

一旦让所有不同的类都继承自定义Position的类,然后当您通过父类类型引用该对象时,就可以访问那里定义的属性,而无需知道具体的类型。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM