请考虑以下代码:
1. namespace MyNS {
2. // A class
3. public class MyClass {
4. public string Do() {
5. return string.Blank();
6. }
7. // A nested type
8. protected static class Helper {
9. public static string Blank(this string str) {
10 return String.Empty;
11. }
12. }
13. }
14. } /* namespace */
但是第5行将导致程序无法编译。我知道为了使用扩展方法,必须创建一个静态类,并通过using
指令引用它的封闭命名空间。
当静态类是嵌套类时,如何实现这一点?
答案 0 :(得分:4)
无法做到。无法在嵌套类中定义扩展方法。
尽管实现此功能没有重大障碍,但它确实感觉相当麻烦:嵌套类中的扩展方法似乎有点过分,因为它们可能也被定义为外部类本身的一部分。
此外,它确实强制您将其明确地组织为您的课程的扩展(同样,您必须),而不是其中的一部分。
如果您只是想在本地定义它们(就像接近其他相关功能一样),您可能想尝试SLaks' trick在嵌套的命名空间声明中创建扩展方法,使得这个新命名空间中的类不是更长的“嵌套”。
答案 1 :(得分:3)
你做不到。要使该方法成为扩展方法,它需要位于非嵌套类中。