我想我记得很久以前读过,在 C#3 中,扩展方法只能应用于原始类型和接口;并且在 C#4 中它们可以用来扩展任何类型。这与我现在看到的不匹配,我发现很难找到这个记录。
这有什么道理吗,还是我的记忆弥补了这一切?
关于可以扩展哪些类型的规则是什么?
C# 3 和 4 之间有什么区别吗?
我想我记得很久以前读过,在 C#3 中,扩展方法只能应用于原始类型和接口;并且在 C#4 中它们可以用来扩展任何类型。这与我现在看到的不匹配,我发现很难找到这个记录。
这有什么道理吗,还是我的记忆弥补了这一切?
关于可以扩展哪些类型的规则是什么?
C# 3 和 4 之间有什么区别吗?
有没有道理呢?
不。
关于可以扩展哪些类型的规则是什么?
调用规则在 C# 4 规范的第 7.6.5.2 节中。声明规则在第 10.6.9 节中。
回答您的具体问题:非托管指针类型可能无法扩展。
C# 3 和 4 之间有什么区别吗?
是的。C# 4 添加了处理“动态”的附加规则。扩展方法不是动态解析的;如果你有
dynamic d = 10;
d.MyIntExtension();
那么动态语言运行时将不会在 int 上找到扩展方法。看
更多细节。
你编好了!据我所知,C#3 和 C#4 之间的规则没有变化。
(对相关规范文件的粗略比较似乎证实了这一点。)
这有什么道理吗,还是我的记忆弥补了这一切?
你编的。扩展方法一直用于IEnumerable<T>
.
这是 Fx3.5 (C# 3) 的MSDN 链接,其中第二个示例是 System.String 的扩展,而 String 不是原始类型。