【问题标题】:Differences between extension methods in C#3 & 4C#3 & 4 中扩展方法的区别
【发布时间】:2011-01-04 11:47:31
【问题描述】:

我记得我很久以前读过,在 C#3 中,扩展方法只能应用于原始类型和接口;并且在 C#4 中它们可以用来扩展任何类型。这与我现在看到的不符,而且我发现很难找到这个记录。

这有什么真实的吗?还是我的记忆都编造了?

关于哪些类型可以扩展的规则是什么?

C# 3 和 4 之间有什么区别吗?

【问题讨论】:

  • 您可以在任何类型上使用它。从一开始。

标签: c# c#-4.0 extension-methods versions


【解决方案1】:

这是真的吗?

没有。

关于哪些类型可以扩展的规则是什么?

调用规则在 C# 4 规范的第 7.6.5.2 节中。声明规则在第 10.6.9 节。

回答您的具体问题:非托管指针类型可能无法扩展。

C# 3 和 4 之间有什么区别吗?

是的。 C# 4 添加了处理“动态”的附加规则。扩展方法不是动态解析的;如果你有

dynamic d = 10;
d.MyIntExtension();

那么动态语言运行时将不会在 int 上找到扩展方法。见

Will the dynamic keyword in C#4 support extension methods?

了解更多详情。

【讨论】:

    【解决方案2】:

    你编的!据我所知,C#3 和 C#4 之间的规则没有变化。

    (对相关规范文件的粗略比较似乎证实了这一点。)

    【讨论】:

      【解决方案3】:

      这有什么真实的吗?还是我的记忆都编造了?

      你编的。 IEnumerable<T> 上一直使用扩展方法。


      编辑:

      这是 Fx3.5 (C# 3) 的 MSDN Link,其中第二个示例是 System.String 的扩展,而 String 不是原始类型。

      【讨论】:

      • 但是IEnumerable<T> 是一个接口,所以不能回答他的问题:-)
      • @steven,是的,我的阅读草率。大多数示例都是针对接口的。不过,Thq 的问题似乎得到了解答。
      • 非常感谢。 (几秒钟后我编辑了问题以添加接口,所以这可能是我的错。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      相关资源
      最近更新 更多