C#3和C#中的扩展方法之间的差异4

时间:2011-01-04 11:47:32

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

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

这是否有任何道理,或者我的记忆是否完整?

哪些类型可以扩展哪些规则?

C#3和4之间是否存在差异?

3 个答案:

答案 0 :(得分:6)

  

这有什么道理吗?

没有

  

哪些类型可以扩展哪些规则?

调用规则见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?

了解更多详情。

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

  

这是否有任何道理,或者我的记忆是否完整?

你做到了。 IEnumerable<T>上一直使用扩展程序方法。


编辑:

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