使用在接口中声明和实现的扩展方法
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();
}
我试着理解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();
}