1

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

这有什么道理吗,还是我的记忆弥补了这一切?

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

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

4

3 回答 3

6

有没有道理呢?

不。

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

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

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

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

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

dynamic d = 10;
d.MyIntExtension();

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

C#4 中的 dynamic 关键字是否支持扩展方法?

更多细节。

于 2011-01-04T15:14:58.720 回答
3

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

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

于 2011-01-04T11:50:14.730 回答
3

这有什么道理吗,还是我的记忆弥补了这一切?

你编的。扩展方法一直用于IEnumerable<T>.


编辑:

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

于 2011-01-04T11:50:54.517 回答