非常简单的扩展方法解释Layman的术语(C#)

时间:2011-05-17 15:43:39

标签: c# .net windows methods

  

可能重复:
  What are Extension Methods?

我知道这些问题之前已被提出过,但有些人可能会提供一个非技术性的解释,尽可能简单地说明。

关于其他答案的所有文档似乎对我来说有点远了

5 个答案:

答案 0 :(得分:2)

扩展方法是一种在类型上模拟新方法而不实际更改类型定义本身的方法。

我想一个解释它的外行的方式是它给每个类型它自己的个人随行人员。他们本身并没有被修改,他们只是凭借与他们一起出去玩的人获得了许多新的能力。

答案 1 :(得分:1)

我认为它不比Wikipedia article中的一句话简单得多:

“扩展方法使您能够向现有类型'添加'方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。”

答案 2 :(得分:0)

好吧,编程本质上是“技术性的”,所以我会尝试尽可能多地学习以理解文档。但是,扩展方法只允许您将类似实例方法的方法添加到现有类中,否则将被关闭以进行修改。

例如,如果我编写了一个包含类型Foo并且没有分发源代码的库,那么您将被粘贴子类以添加任何功能,并且只有在我离开类型时才能实现。启封”。随着扩展方法的出现,您可以像调用任何其他方法一样向类中添加方法(实际上它们是作为静态方法实现的,它将隐藏的第一个参数带到Foo的实例,所以你仍然无法访问该类的私人成员。)

答案 3 :(得分:0)

扩展方法允许您向无法访问其源的类添加功能(方法)。

答案 4 :(得分:0)

您可以定义一个简单的类:

public class A
{
    public void B()
    {
        Console.WriteLine("B called");
        this.C();
    }
    public void C()
    {
        Console.WriteLine("C called");
    }
}

但是如果你把A定义为:

public class A
{
    public void C()
    {
        Console.WriteLine("C called");
    }
}

你想要添加功能B吗?您可以使用扩展方法来执行此操作:

public class A
{
    public void C()
    {
        Console.WriteLine("C called");
    }
}
// the extensions class, can be any name, must be public
public class Extensions
{
    public static void B(    this                   A                 me)
 // ^ must be public static  ^ indicates extension  ^ type to extend  ^ name of variable instead of this
    {
        Console.WriteLine("B called");
        // instead of this, you use the name of variable you used in the parameters
        me.C();
    }
}

现在您可以像第一个示例中那样调用A.B()