我尝试理解Extension method concept in c#
,所以我添加了这个界面:
public interface IExtension
{
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());
a.Multiple();
Console.ReadKey();
}
我在a.Multiple();
中收到错误表示无法识别该方法。
即使我添加了一个实现接口的静态类,我也会遇到同样的错误。
如何解决此问题?
答案 0 :(得分:4)
扩展方法必须位于static class
,而不是interface
public static class MyExtension
{
public static int Multiple(this int a)
{
return a * 2;
}
}
你应该打印结果:
Console.WriteLine(a.Multiple());
请注意,您的扩展方法无法更改a
的值(因为int
是值类型),它只能返回一个新值!。
添加
进行检查Console.WriteLine(a.Multiple());
Console.WriteLine(a);
同样好奇,在Java 8中Oracle将默认方法添加到接口:https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html它们有点像C#扩展方法,但它们是在接口内部定义的。实现接口的类型可以覆盖它们,否则它们“继承”这些默认方法。
答案 1 :(得分:3)
此代码不应编译。请先阅读c# - https://msdn.microsoft.com/en-us//library/bb383977.aspx
中的扩展方法扩展方法应该在公共静态类中声明,接口是多余的。
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
答案 2 :(得分:2)
必须在非通用static
类中指定扩展方法,作为static
方法。你不能在界面中声明一个。
编辑:
@LamloumiAfif必须拥有一个与我不同且更神奇的编译器。