使用嵌套类中定义的扩展方法

时间:2014-02-24 17:09:47

标签: c# .net extension-methods

请考虑以下代码:

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指令引用它的封闭命名空间。

当静态类是嵌套类时,如何实现这一点?

2 个答案:

答案 0 :(得分:4)

无法做到。无法在嵌套类中定义扩展方法。

尽管实现此功能没有重大障碍,但它确实感觉相当麻烦:嵌套类中的扩展方法似乎有点过分,因为它们可能也被定义为外部类本身的一部分。

此外,它确实强制您将其明确地组织为您的课程的扩展(同样,您必须),而不是其中的一部分。

如果您只是想在本地定义它们(就像接近其他相关功能一样),您可能想尝试SLaks' trick在嵌套的命名空间声明中创建扩展方法,使得这个新命名空间中的类不是更长的“嵌套”。

答案 1 :(得分:3)

你做不到。要使该方法成为扩展方法,它需要位于非嵌套类中。