最近Orcas Beta1刚出,C#3.0炒得越来越热,一些新特性也是相当诱人,这几天,把.net3.0的环境终于是搭上了, 配环境的经验以后再说,这里先谈一下,C#3.0里的一个新特性,Extension Methods扩展方法,个人理解,有点仿JavaScript里的Prototype,主要是不用重编译,就可对一个类型加入方法,引用类型和值类型都是可以的.
扩展方法允许开发人员往一个现有的CLR类型的公开契约(contract)中添加新的方法,而不用生成子类或者重新编译原来的类型。扩展方法有助于把今天动态语言中流行的对duck typing的支持之灵活性,与强类型语言之性能和编译时验证融合起来。
扩展方法促成了好多有用的使用场景,并使在作为Orcas一部分发布的.NET版本中引进的非常强大的LINQ查询框架成为可能。
下面是一个简单的示例:
public static class
test

...
{
public static bool fun(this string s)

...{
return s.Length>10&&s.Contains("test");
}
public static double cal(this int a)

...{
return a*3.14159*a;
}
public static bool In(this object o,IEnumerable c)

...{
foreach(object obj in c)
if(obj.Equals(o))
return true;
return false;
}
}
class必须是static,every method也必须是public static,其中的this是指要把方法加入的类型,如string就是添加到string类型中,前面两个方法随便做个测试,没什么意义的,第三个方法,是遍历一个集合,判断是否包含o.
下面是Main代码块:
class
Program

...
{
static void Main(string[] args)

...{
string s="first test";
Console.WriteLine(s.fun());
int a=42324;
Console.WriteLine(a.cal());

string[] str=...{"abcd","efgh","hijk","dog","cat","fire","lay"};
Console.WriteLine("dog".In(str));
}
}