繁体   English   中英

如何在另一个类中使用扩展功能? C#

[英]How do I use an extension function in another class? C#

我有几个扩展函数,我想在类之间转移。

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

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

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

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

我该如何实施?

您很接近-扩展方法必须在静态类中:

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

您还需要使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);
    }

}

要创建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:请记住,它不是类型方法,它只是静态方法,但是您可以将其用作类型的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM