【问题标题】:Extension method in c# [duplicate]c#中的扩展方法[重复]
【发布时间】:2015-04-23 05:18:19
【问题描述】:

以下两种实现有什么区别,如果没有区别,为什么我们需要扩展方法? (public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source);)

1.IEnumerable<Student> myExtension = mtyStudent; // "mtyStudent is colletion"
    myExtension.ToList();

2.List<Student> myStudent= Enumerable.ToList(myExtension);

【问题讨论】:

    标签: c# extension-methods


    【解决方案1】:

    没有区别。无论哪种方式,您都调用相同的方法。 Enumerable.ToList&lt;TSource&gt;(this IEnumerable&lt;TSource&gt; source) 是一种扩展方法。它只是Enumerable 类中的一个静态方法,但您可以像调用实例方法一样调用它。这才是扩展方法的真正意义所在。

    【讨论】:

      【解决方案2】:

      为什么扩展方法是为了扩展类的功能,否则你将无法做到这一点,并且它们使使用它们更加直接。

      假设您有一个无法直接访问的类,并且您想通过基于类属性进行一些计算来获取某个值来扩展它,您可以执行一个将类作为参数的函数,例如。

      public static int GetValue(OtherGuysClass c)  { ...  }
      

      然后您必须通过以下方式调用它

      ClassX.GetValue(new OtherGuysClass());
      

      通过添加关键字“this”

      public static int GetValue(this OtherGuysClass c)  { ...  }
      

      然后你可以调用它

      new OtherGuysClass().GetValue();
      

      【讨论】:

        猜你喜欢
        • 2021-12-23
        • 1970-01-01
        • 2023-03-23
        • 2011-05-12
        • 1970-01-01
        • 2017-09-25
        • 2022-06-10
        • 1970-01-01
        • 2010-10-26
        相关资源
        最近更新 更多