C# 将字符串类型的扩展方法写入为(String.extension而不是“String.extension”)

C# 将字符串类型的扩展方法写入为(String.extension而不是“String.extension”),c#,C#,为字符串编写扩展很容易,但问题是,如果像这样编写,它总是显示为“MyString”.ExtensionMethod(): public static class Extensions{ public static String ExtensionMethod(this String input){ return "Something"; } 现在,如果我们需要为字符串类型编写一个扩展方法,它可以像这样使用: var value = String.MyExtension

为字符串编写扩展很容易,但问题是,如果像这样编写,它总是显示为
“MyString”.ExtensionMethod()

public static class Extensions{
   public static String ExtensionMethod(this String input){
      return "Something";
   }
现在,如果我们需要为字符串类型编写一个扩展方法,它可以像这样使用:

 var value = String.MyExtensionMethod();
字符串类似。为空


什么是正确的方法来定义我们想要的编译器?

这将需要添加不可能的
静态扩展方法

SO中有几个答案涵盖了这个主题,以及如何克服它


请参阅示例。

这需要添加不可能的
静态扩展方法

SO中有几个答案涵盖了这个主题,以及如何克服它

请参见示例。

是公共静态字段

您不能创建这样的扩展方法

扩展方法仅支持实例级公共方法。

是公共静态字段

您不能创建这样的扩展方法


扩展方法只支持实例级公共方法。

这不可能有静态扩展方法。此外,您不能将静态成员添加到您不拥有的任何类中,而且只能在同一assemlby中使用partial。我所说的“拥有”是指您拥有源代码而不使用dll


在我的例子中,我有一个包含自定义静态方法的
StringExtensions
类。

这是不可能有静态扩展方法的。此外,您不能将静态成员添加到您不拥有的任何类中,而且只能在同一assemlby中使用partial。我所说的“拥有”是指您拥有源代码而不使用dll


在我的例子中,我有一个
StringExtensions
类,其中包含自定义静态方法。

扩展方法只能用于类的实例。编译器只需在所有公共静态类中搜索所有公共静态方法,其中type前面带有关键字
this
,并将它们“附加”到该类型,从而可以将它们作为实例方法调用,但这只是一种方便,事实上,此方法与任何其他静态方法完全相同

因此,单词
this
不能与
static
类一起使用,因为它指向某个类的实例,而不存在
static instance
这样的东西

public static class Helper
{
    public static bool MyExtMethod(this MyClass instance)
    {
        ...
    }
}
编译器找到此方法并将其附加到MyClass,操作如下:

class MyClass
{
   ...
    public bool MyExtMethod()
    {
       return Helper.MyExtMethod(this);
    }
} 
因此,它基本上允许我们在
MyClass
上调用静态方法,而不是直接在
Helper
上调用

String.Empty是只读字段,不是方法

但是,您可以做的是创建自己的类来处理string,并在其中添加方法:

class MyString
{
   private readonly string value;
   public string Value { get { return value; } }

   public MyString(string s) { this.value = s; }   

   public static implicit operator MyString(string s)
   {
      MyString ms = new MyString(s);
      return ms;
   }

   public static implicit operator string(MyString s)
   {
      return s.Value;
   }

   public static String ExtensionMethod1(String input){
      return "Something1";
   }

   public static String ExtensionMethod2(String input){
      return "Something1";
   }
}

虽然它不是您想要的

扩展方法只能用于类的实例。编译器只需在所有公共静态类中搜索所有公共静态方法,其中type前面带有关键字
this
,并将它们“附加”到该类型,从而可以将它们作为实例方法调用,但这只是一种方便,事实上,此方法与任何其他静态方法完全相同

因此,单词
this
不能与
static
类一起使用,因为它指向某个类的实例,而不存在
static instance
这样的东西

public static class Helper
{
    public static bool MyExtMethod(this MyClass instance)
    {
        ...
    }
}
编译器找到此方法并将其附加到MyClass,操作如下:

class MyClass
{
   ...
    public bool MyExtMethod()
    {
       return Helper.MyExtMethod(this);
    }
} 
因此,它基本上允许我们在
MyClass
上调用静态方法,而不是直接在
Helper
上调用

String.Empty是只读字段,不是方法

但是,您可以做的是创建自己的类来处理string,并在其中添加方法:

class MyString
{
   private readonly string value;
   public string Value { get { return value; } }

   public MyString(string s) { this.value = s; }   

   public static implicit operator MyString(string s)
   {
      MyString ms = new MyString(s);
      return ms;
   }

   public static implicit operator string(MyString s)
   {
      return s.Value;
   }

   public static String ExtensionMethod1(String input){
      return "Something1";
   }

   public static String ExtensionMethod2(String input){
      return "Something1";
   }
}

虽然这并不是你想要的

出于好奇而问这个问题,但你不需要100%地回答这样的问题!出于好奇问这个问题,你不必百分百地这样问!