博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#的扩展方法学习
阅读量:6617 次
发布时间:2019-06-25

本文共 2029 字,大约阅读时间需要 6 分钟。

一,什么是扩展方法?

1,扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。

2,扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

3,扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。 仅当你使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。

4,扩展方法在非嵌套的、非泛型静态类内部定义的

5,在代码中,可以使用实例方法语法调用该扩展方法。 但是,编译器生成的中间语言 (IL) 会将代码转换为对静态方法的调用。 因此,并未真正违反封装原则。 实际上,扩展方法无法访问它们所扩展的类型中的私有变量。

6,扩展方法是静态方法,则也不能被重写

Extension类

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Extensions{    //public static class Extension
//提示扩展方法必须在非泛型静态类中定义 public static class Extension { public static void MethodStr(this string i) { Console.WriteLine(i); } }}

 

DefineIMyInterface接口

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DefineIMyInterface{    public interface IMyInterface    {        void MethodStr();    }}

Program调用实现:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Extensions;using DefineIMyInterface;namespace ExtenMethod{    class Test : IMyInterface    {        public void MethodStr()        {            Console.WriteLine("接口实现");        }    }    class Test2    {        public void MethodStr()        {            Console.WriteLine("类的实现方法");        }    }class Program    {        private string pri = "2";        static void Main(string[] args)        {            //在编译后,相同签名的方法,扩展方法的优先级总是比类型本身中定义的实例方法低,则实现的是接口和类的方法,            //以下两个例子中:与接口或类方法具有相同名称和签名的扩展方法永远不会被调用,因为它的名称和签名与这些类已经实现的方法完全匹配。            //可以使用扩展方法来扩展类或接口,但不能重写扩展方法。             Test t = new Test();            t.MethodStr();            Test2 t2 = new Test2();            t2.MethodStr();            //实现扩展方法            string extenmethod = "扩展方法实现";            extenmethod.MethodStr();            //扩展方法无法访问它们所扩展的类型中的私有变量。            //在代码中,可以使用实例方法语法调用该扩展方法。但是,编译器生成的中间语言 (IL) 会将代码转换为对静态方法的调用。因此,并未真正违反封装原则。            //pri.MethodStr();  //报错        }    }}

 

转载于:https://www.cnblogs.com/May-day/p/6477958.html

你可能感兴趣的文章
Python语言中round函数的一个疑惑
查看>>
使用msf对tomcat测试
查看>>
Spring事务隔离级别,事务传播行为
查看>>
CRC是什么?
查看>>
每次看完羽毛球赛
查看>>
第一章练习题
查看>>
三、JVM垃圾回收1(如何寻找垃圾?)
查看>>
RabbitMQ-从基础到实战(2)— 防止消息丢失
查看>>
【译】ExtJS 4.1会带来什么
查看>>
重要的话
查看>>
mysql多个TimeStamp设置(转)
查看>>
php中的占位符
查看>>
Strus2学习Exception处理集锦(一)
查看>>
BSS段 data段 text段 堆heap 和 栈stack
查看>>
数据库创建好之后如何创建scott用户
查看>>
关于RichTextBox字体的问题
查看>>
关于今天很热的--FizzBuzzWhizz
查看>>
EBS销售订单挑库发放处理程序
查看>>
APP的内部多语言配置
查看>>
sql 查询表的字段数量
查看>>