扩展方法在 C# 中有何作用以及为什么需要它?

mad*_*ddy 0 c# extension-methods

我最近正在学习 C#,并了解到扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。有哪些例子可以阐明这一点?

Ice*_*ind 5

扩展方法允许使用新方法扩展现有类型,而无需更改原始类型的定义。它允许您向您可能无法继承(因为它是sealed)或没有源代码的类型添加功能。

这是一个例子。我们将添加一个Age()方法DateTime

public class Program
{
    public static void Main()
    {
        DateTime birthdate = new DateTime(1980, 10, 7);

        Console.WriteLine("Your age is: " + DateTime.Now.Age(birthdate));
    }   
}


public static class Extensions
{
    public static int Age(this DateTime date, DateTime birthDate)
    {
        int birthYear = birthDate.Year;
        int currentYear = DateTime.Now.Year;

        return currentYear - birthYear - 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

从示例中您可以看到我们Age()向 C#DateTime类型添加了一个新方法。希望这能澄清事情。

  • 它对于向通常无法定义方法的事物添加方法也很有用,例如接口、枚举等(是的,我知道 C# 现在有默认的接口方法,但它们的行为与接口上的扩展方法不同)。 (2认同)