首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MemberInfo.GetCustomAttributes过载扩展

MemberInfo.GetCustomAttributes过载扩展
EN

Stack Overflow用户
提问于 2017-07-07 07:45:05
回答 2查看 2K关注 0票数 3

我注意到在System.Reflection包MemberInfo中有两个方法(一个类方法和一个扩展方法)具有相同的签名,但返回类型不同:

类方法:

代码语言:javascript
运行
复制
public abstract object[] GetCustomAttributes(Type attributeType, bool inherit)

扩展方法(内部CustomAttributeExtensions )

代码语言:javascript
运行
复制
public static IEnumerable<Attribute> GetCustomAttributes(this MemberInfo element, Type attributeType, bool inherit)

我知道用这样的参数调用该方法总是会调用类方法,所以我只是想知道:

如何调用扩展方法?

最重要的是,定义具有与类方法相同签名的扩展的目的是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-07 09:21:09

在框架中存在这种复制并不完全是一项功能。但是这是一个困难的地方,他们不得不在.NET 4.5中添加扩展方法。最容易从版本信息块中的MSDN文章底部看到。扩展方法在UWP和Phone项目中是可用的,而遗留方法则不适用。

其根本原因是在4.5的CLR中内置了语言预测。这使得WinRT和CLR类型之间存在着相当大的差异,这是不可见的。如果程序员有任何迹象表明,实际上是COM在驱动UWP :)很好地隐藏了,但是Type类与CLR的结合太重了,他们不得不提供TypeInfo类作为替代。和扩展方法来弥补api之间的差距。

如果不以UWP为目标,那么扩展方法就没有多大用处,应该更倾向于遗留方法。扩展方法大约慢了30%

票数 6
EN

Stack Overflow用户

发布于 2017-07-07 08:00:12

您是对的,MemberInfo.GetCustomAttributesCustomAttributeExtensions.GetCustomAttributes实际上具有相同的参数集。

如果您查看每个引用源,您可以看到扩展方法实际上将委托给Attribute.GetCustomAttribute。这种方法最终会回到MemberInfo.GetCustomAttributes

那这两者之间有功能上的区别吗?不,不是真的。那么这种扩展方法存在的原因是什么呢?不幸的是我不知道。CustomAttributeExtensions的主要优点是泛型重载,它允许您返回类型化属性,因此我不认为您实际上希望在通常情况下使用GetCustomAttributes

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44965286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档