如何从方法返回动态和强类型对象

爱丹

例如,在JSON.NET中,您可以调用,JObject.Parse并且它返回JObject具有某些属性的a ,但是如果您调用:

  dynamic obj = JObject.Parse(jsonString);

我可以在该对象上调用JObject上不存在的属性。

约翰

通过调用属性dynamic仍然是强类型的,但它们不是静态类型的(与大多数C#相反)。

也就是说,我不能创建这样的类:

public class Test
{
    public string Name { get; set; }
}

并像这样使用它:

dynamic myClass = new Test { Name = "John" };
myClass.Age = 30;

myClass.Age = 30;行将成功编译,但会在运行时引发异常。这是因为基础对象仍然是强类型的,并且没有实现属性Age使用dynamic并不能使您摆脱困境,它只是将检查类型的责任从编译器转移到了运行时。

好,现在为什么行得通?:

dynamic myClass = new ExpandoObject();
myClass.Name = "John";

好了,ExpandoObject有一个特殊的接口:IDynamicMetaObjectProvider这允许运行时检查对象的其他(运行时创建的)属性,方法等,然后获取并设置这些值,无论它们是内存中的值还是委托方法等。

通过这种dynamic test = JObject.Parse(jsonString);方式,您可以像在应用程序中的具体类一样访问JSON元素。运行时只是在IDynamicMetaObjectProvider接口中查询您所请求的属性。

您可以在此处阅读有关实现自己的动态对象的更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章