学习推广方法

Learning extension methods

我正在学习扩展方法,并且正在尝试编写我的第一个扩展方法。我想使用系统命名空间并使用它编写扩展方法。

我的方法是将货币从 GBP 转换为 BGN。

现在在我的 Main 方法中,我想使用这个扩展方法,但是我遇到了编译错误。

public static class ExtentionMethodConvertGBPtoBGN
{
    public static double ConvertGBPtoBGN(this ExtentionMethodConvertGBPtoBGN obj, double BGNmoney, double conversionrate)
    {
        return BGNmoney * conversionrate;
    }
}

编译器抛出错误。

错误 CS0721 'ExtentionMethodConvertGBPtoBGN': 静态类型不能用作参数

this 之后的类型需要是您希望扩展方法存在的对象。

所以如果你想让它在 double 上工作,它需要

public static double ConvertGBPtoBGN(this double obj, double BGNmoney, double conversionrate)

正确的做法是:

public static class ExtentionMethodConvertGBPtoBGN
{
    public static double ConvertGBPtoBGN(this double obj, double conversionrate)
    {
        return obj * conversionrate;
    }
}

this 之后您需要使用您想要扩展的类型。在那种情况下,显然您想扩展 double 功能。然后您使用参数中的 obj(您这样命名)。

您可以通过以下两种方式进行操作: 让我们,转换为主转换class:

public class Conversion
{

}

并且,ExtentionMethodConvertGBPtoBGN 是您的扩展 class:

public static class ExtentionMethodConvertGBPtoBGN
{
   //extension mathod
    public static double ConvertGBPtoBGN(this Conversion obj, double BGNmoney, double conversionrate)
    {
        return BGNmoney * conversionrate;
    }

    //non-extension mathod
    public static double ConvertGBPtoBGN(double BGNmoney, double conversionrate)
    {
        return BGNmoney * conversionrate;
    }
}

现在可以两种方式调用了:

static void Main(string[] args)
    {

        var con = new Conversion();
        var result  = con.ConvertGBPtoBGN(10.0, 20.0);

        //or
        var result2 = ExtentionMethodConvertGBPtoBGN.ConvertGBPtoBGN(10.0, 20.0);
    }