我想我记得很久以前读过C#3扩展方法只能应用于原始类型和接口;而在C#4中,它们可用于扩展任何类型。这不符合我现在所看到的情况,我发现很难找到这个记录。
这是否有任何道理,或者我的记忆是否完整?
哪些类型可以扩展哪些规则?
C#3和4之间是否存在差异?
答案 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不是基本类型。