簡體   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