TOC

This article has been localized into Chinese by the community.

C# 3.0:

扩展方法

C# 3.0提供的另一个有用的功能是扩展方法。它们可以给已经存在的类型增加新的功能,而不需去建子类型或重新编译原始类型。比如,你想判断某个字符串是不是一个数字,通常的做法是建立一个函数并且调用它。而你有了许多这样的函数时,你可以把它们放到一个utility类里面,如下:

public class MyUtils
{
    public static bool IsNumeric(string s)
    {
        float output;
        return float.TryParse(s, out output);
    }
}

现在你可以用1行代码来检查一个字符串:

string test = "4";
if (MyUtils.IsNumeric(test))
    Console.WriteLine("Yes");
else
    Console.WriteLine("No");

要是有了扩展方法的话,你可以扩展String类来直接支持这个检查。你可以声明一个static的类,里面是一些static的方法以构成你的扩展方法库。这是一个例子:

public static class MyExtensionMethods
{
    public static bool IsNumeric(this string s)
    {
        float output;
        return float.TryParse(s, out output);
    }
}

与其它static方法区分开的唯一不同之处是,方法的参数里面的this关键字。它告诉编译器这是string类的一个扩展方法。这就是你创建一个扩展方法所需要做的全部事情。现在,你可以直接调用那些string的IsNumeric() 方法了,就像这样:

string test = "4";
if (test.IsNumeric())
    Console.WriteLine("Yes");
else
    Console.WriteLine("No");

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!