C#3.0新特性----扩展方法(Extension Methods)初探

来源:互联网 发布:.cn域名续费一年多少钱 编辑:程序博客网 时间:2024/06/03 02:47

最近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));
        }

    }