2

我有几个想要在类之间传输的扩展函数。

我有一个名为Helpers.cs的类,我想要以下内容:

namespace XYZ
{
    public class Helpers
    {
        public static string Encrypt(this string plainText){
            //... do encrypting
        }
    }
}

在我的其他类Impliment.cs中,我想要以下内容:

string s = "attack";
s.Encrypt();

我该如何实施?

4

3 回答 3

3

你很接近 - 扩展方法需要在静态类中:

public static class Helpers
{
    public static string Encrypt(this string plainText){
        //... do encrypting
    }
}

如果你尝试了你发布的内容,你会得到一个非常清晰的编译器错误,它说的基本相同:

扩展方法必须在非泛型静态类中定义

请注意,您的使用将与您想要的略有不同。你不能这样做:

string s = "attack";
s.Encrypt();

因为字符串是不可变的。您可以做的最好的事情是覆盖现有的变量或将结果存储在一个新变量中:

string s = "attack";
s = s.Encrypt();  // overwrite

或者

string s = "attack";
string s2 = s.Encrypt();  // new variable
于 2014-07-16T19:57:30.907 回答
2

您还需要制作class,static并使用using声明。

例子

FileA.cs

namespace XYZ {

    public static class Helpers {

        public static string Encrypt(this string plainText){
            //... do encrypting
            return plainText;
        }

    }

}

FileB.cs

using XYZ;

public class MainClass {

    public static void Main() {
        string s = "input";
        s = s.Encrypt();
        Console.WriteLine(s);
    }

}
于 2014-07-16T19:57:23.493 回答
1

要创建Extension Methodclass必须是static,但通常必须遵循以下规则:

  • 类必须是publicstatic
  • 该方法必须是publicstatic
  • 要创建扩展方法的类型,在C#中,第一个参数必须在参数this之前有关键字

在您的情况下,将类更改为static,例如:

public static class Helpers
{
    public static string Encrypt(this string plainText)
    {
         //... do encrypting
         // return a string;
    }
}

我还喜欢创建名称如 Type 和Extensionssufix 的类,例如:StringExtensions.cs、、DateTimeExtensions.cs等。

Obs:记住它不是类型方法,它只是一个静态方法,但你可以将其用作类型中的方法。

于 2014-07-16T19:57:19.527 回答