首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展方法中的c#静态类访问

扩展方法中的c#静态类访问
EN

Stack Overflow用户
提问于 2014-08-12 21:39:25
回答 1查看 91关注 0票数 0

matrix.Extension()和ExtensionMethods.Extension(矩阵)有什么区别?

代码语言:javascript
复制
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?
}

扩展类

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2014-08-12 21:41:39

matrix.Extension()和ExtensionMethods.Extension(矩阵)有什么区别?

什么都没有。编译器有效地将第一个转换为第二个。

在C# 6中会有一个不同之处,如果你已经特别静态地导入了ExtensionMethods类型,第一个将会工作,而第二个将不会。

扩展方法是静态方法,但旨在用作实例方法。using static功能使类型的扩展方法可用作扩展方法,而不是将扩展方法引入全局作用域

(不过,这在当前的CTP中还没有实现。)

考虑到它们是等价的,您可能会问自己为什么会存在这种语法糖。有两个原因:

  • 如果方法调用中有一些恰好是静态的,那么将它们链接在一起会更加方便。例如:

foo.Bar().Baz().Qux()

比以下代码更易于阅读:

ThirdClass.Qux(SecondClass.Baz(FirstClass.Bar(foo)))

  • It允许LINQ模式跨接口和类型一致地工作,无论这些类型直接作为实例成员实现该模式,还是使用扩展方法。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25265810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档