使用在接口中声明和实现的扩展方法

Using an extension method declared and implemented in interface

我试着理解Extension method concept in c#,所以我添加了这个接口:

 public interface IExtension
{
   public static int Multiple(this int a)
   {
       return a * 2;
   }
}

在我的 Main 方法中

 public static void Main()
   {
       Console.WriteLine("Entrer un numero");
       int a =int.Parse( Console.ReadLine());
       a.Multiple();
       Console.ReadKey();
   }

我在 a.Multiple(); 中收到一个错误,表明该方法无法识别。

即使我添加了静态 class 接口实现,我也遇到了同样的错误。

我该如何解决这个问题?

扩展方法必须在 static class 中,而不是在 interface

public static class MyExtension
{
    public static int Multiple(this int a)
    {
        return a * 2;
    }
}

你应该打印结果:

Console.WriteLine(a.Multiple());

注意你的扩展方法不能改变a的值(因为int是一个值类型),它只能return一个新的值!.

通过添加

进行检查
Console.WriteLine(a.Multiple());
Console.WriteLine(a);

出于好奇,在 Java 8 中,Oracle 向接口添加了 默认方法https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html 它们有点像 C# 扩展方法,但它们在接口内部定义。实现接口的类型可以覆盖它们,否则它们 "inherit" 这些默认方法。

扩展方法必须在非泛型 static class 中指定为 static 方法。您不能在接口中声明一个。

编辑:

@LamloumiAfif 一定有一个与我不同的更神奇的编译器。

此代码不应编译。请先阅读 c# 中的扩展方法 - https://msdn.microsoft.com/en-us//library/bb383977.aspx

扩展方法应在 public static class 中声明,接口是多余的。

public static class Extensions
{
   public static int Multiple(this int a)
   {
       return a * 2;
   }
}

public static void Main()
{
    Console.WriteLine("Entrer un numero");
    int a = int.Parse(Console.ReadLine());
    int doubledNumber = a.Multiple();
    Console.ReadKey();
}

这是演示 - https://dotnetfiddle.net/JPJD5g