[转] .net 3.5新特性之用this关键字为类添加扩展方法

具体用法如下:

    public static class ClassHelper
    {
        //用this 声明将要吧这个方法附加到Student对象
        public static bool CheckName(this Student stu)
        {
            if (stu.Name == "小明")
            {
                return true;
            }
            else
                return false;
        }
        //为String对象添加一个ChangeString 方法
        public static string ChangeString(this String s,string str)
        {
            return str + ":" + s;
        }
    }

    public class Student
    {
        public string Name { get; set; }

        public void Show()
        {
            this.CheckName();//Student拥有了CheckName这个方法
            
        }
        public void ShowString()
        {
            string s = "aaa";
            s.ChangeString("哈哈");//String拥有了ChangeString这个方法
        }
    }

这个例子很简单,为自定义的Student类扩展了一个CheckName方法,该方法没有参数,然后又为String系统自带的类 扩展了一个ChangeString 方法,该方法有一个string  类型的参数,注意:扩展方法必须声明为static静态方法,并且放在静态类中。

 

this不仅可以扩展类方法,还可以扩展接口,使得任何继承自该接口的类都会拥有此扩展方法。这里我们修改上面这个例子:

public static class ClassHelper
    {
        //用this 声明将要吧这个方法附加到IStudent对象
        public static bool CheckName(this IStudent stu)
        {
            if (stu.Name == "小明")
            {
                return true;
            }
            else
                return false;
        }
        //为String对象添加一个ChangeString 方法
        public static string ChangeString(this String s, string str)
        {
            return str + ":" + s;
        }


    }

    public interface IStudent
    {
        public void Show();
        public string Name { get; set; }
    }

    public class StudentA : IStudent
    {
        

        public void Show()
        {
            this.CheckName();//Student拥有了CheckName这个方法

        }
        public void ShowString()
        {

            string s = "aaa";
            s.ChangeString("哈哈");//String拥有了ChangeString这个方法
            
        }
    }

    public class StudentB : IStudent
    {


        public void Show()
        {
            this.CheckName();//Student拥有了CheckName这个方法

        }
        public void ShowString()
        {
            string s = "aaa";
            s.ChangeString("哈哈");//String拥有了ChangeString这个方法

        }
    }

,注意这个例子的CheckName由this Student 改成了 this IStudent,IStudent 是一个接口,StudentA和StudentB都继承了这个接口,他们都会拥有CheckName这个扩展方法。

 

显然这样做是有好处的,当第三方提供给你一个DLL,其中包括许多类,由于这些类都是封装在DLL中的,当你想扩展其中某个类的时候,你却不能修改类的源代码。这时候你就可以用this来扩展。。。。

posted @ 2014-07-31 10:37  星释天狼  阅读(117)  评论(0)    收藏  举报