C#基础之扩展方法-创新互联

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。 --- 摘自MSDN

成都创新互联公司自2013年起,是专业互联网技术服务公司,拥有项目成都网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元罗定做网站,已为上家服务,为罗定各地企业和个人服务,联系电话:028-86922220

下面我们自己定义一个A类和Program类来为string扩展方法

 public static class A
    {
        public static int Test(this string s)
        {

            return 1;
        }

        public static int IndexOf(this string s, char c)
        {
            return 1;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            int a = A.Test("sds");
            int c = "sds".Test();
            Console.WriteLine(a);
            Console.WriteLine(c);

            int b = A.IndexOf("asdfg", 'd');
            Console.WriteLine(b);
            int d = "asdfg".IndexOf('d');
            Console.WriteLine(d);
        }
    }

扩展方法很简单,就是在参数类型前面加this,就为当前参数的类型增加了扩展方法,但是必须在静态类中声明静态方法(想要扩展的方法).以上例子为string类扩展了Test方法和indexof方法(string中有同名方法),运行结果为1 1 1 2,由此可以推论 扩展的方法如果和string类中的方法重名,则会执行string类中的方法,而不会执行扩展方法,再让我们来看看反编译的结果C#基础之扩展方法

由此更可以确定 执行的是string中的方法,再看上面的两个调用,可以观察到调用的都是A类中的静态方法,和string类并无多大关联,也可以得出扩展方法是不能调用string中的私有变量和方法,所以 string类也不用重新编译.

对扩展类总结下:

    扩展方法不改变原有被扩展类代码,不用重新编译被扩展类.

    不能访问被扩展类的私有成员,当和同名方法重名时优先执行原方法

    引用一个类库,但是我们没有该类库的源代码,那么我们可以使用扩展方法 ,使用扩展方法进行类的扩展。

第一次写博文,望大神多多指点.

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站名称:C#基础之扩展方法-创新互联
文章分享:http://azwzsj.com/article/cdcigj.html