matrix.Extension()和ExtensionMethods.Extension(matrix)之间的区别是什么?
static void Main(string[] args)
{
decimal[,] testData = new[,] {{1m, 2m}, {3m, 4m}};
ImmutableMatice matrix = new ImmutableMatice(testData);
Console.WriteLine(matrix.Extension());
Console.WriteLine(ExtensionMethods.Extension(matrix)); // return the same like matrix.Extension() but whats the difference?
}
扩展类
static class ExtensionMethods
{
public static string Extension(this ImmutableMatice array)
{
Console.WriteLine("Values of array are: ");
for (int i = 0; i < array.Array.GetLength(0); i++)
{
for (int j = 0; j < array.Array.GetLength(1); j++)
{
Console.Write(string.Format("{0} ", array[i, j]));
}
Console.Write(Environment.NewLine + Environment.NewLine);
}
return null;
}
答案 0 :(得分:4)
matrix.Extension()和ExtensionMethods.Extension(矩阵)之间的区别是什么?
什么都没有。编译器有效地将第一个转换为第二个。
将作为C#6的一个区别,如果您专门静态导入ExtensionMethods
类型,第一个将起作用而第二个不起作用。来自“C#中的即将推出的功能”文档:
扩展方法是静态方法,但旨在用作实例方法。 使用静态功能不是将扩展方法引入全局范围 可用作扩展方法的类型的扩展方法
(虽然目前的CTP尚未实现。)
鉴于它们是等价的,你可能会问自己为什么这种语法糖存在。有两个原因:
如果它们中的一些恰好是静态的,那么将方法调用链接在一起会更加方便。例如:
foo.Bar().Baz().Qux()
比阅读更简单:
ThirdClass.Qux(SecondClass.Baz(FirstClass.Bar(foo)))
它允许LINQ模式跨接口和类型一致地工作,无论类型是直接将模式实现为实例成员,还是使用扩展方法。