如何在另一个类中使用扩展函数? C#

时间:2014-07-16 19:55:38

标签: c# extension-function

我想要在类之间传输一些扩展函数。

我有一个名为 Helpers.cs 的课程,我希望有以下内容:

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

在我的其他班级 Impliment.cs 中,我希望有以下内容:

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

我该如何实现?

3 个答案:

答案 0 :(得分:2)

您还需要制作classstatic并使用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);
    }

}

答案 1 :(得分:2)

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

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

如果你尝试了你发布的内容,你会得到一个非常清晰的编译错误,它基本上都是一样的:

  

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

请注意,您的使用略微与您想要的不同。你做不到:

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

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

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

string s = "attack";
string s2 = s.Encrypt();  // new variable

答案 2 :(得分: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和Extensions sufix的类,例如:StringExtensions.csDateTimeExtensions.cs等。

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