C#中的扩展方法

编程入门 行业动态 更新时间:2024-10-28 04:19:04

C#中的扩展<a href=https://www.elefans.com/category/jswz/34/1771314.html style=方法"/>

C#中的扩展方法

C#中扩展方法是C# 3.0/.NET 3.x 新增特性,能够实现向现有类型中“添加”方法,以下主要介绍C#中扩展方法的声明及使用。

1、扩展方法的声明

扩展方法使能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。这里的“添加”之所以使用引号,是因为并没有真正地向指定类型添加方法。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

1).NET FrameWork中的扩展方法

VS中可以看扩展方法,如下图:

2)自定义扩展方法

定义扩展方法需要定义一个静态类,它的成员方法全是静态方法,而且每个方法的大部分第一参数都是以this开头。扩展方法的三个要素是:静态类、静态方法以及this关键字。

声明class类:

public class People
{public People(int id, string name, int age){this.Id = id;this.Name = name;this.Age = age;}public int Id{get;set;}public string Name{get;set;}public int Age{get;set;}
}

 声明扩展方法:

public static class PersonExtension
{public static string FormatOutput(this Person p){return string.Format("ID:{0},Name:{1},Age:{2}",p.ID, p.Name, p.Age);}
}

2、扩展方法的使用

对指定的类型声明扩展方法,可以通该类型的实例直接调用,

例如,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{class Program{static void Main(string[] args){Person p = new Person(5,"CJavaPY",1);Console.WriteLine(p.FormatOutput());   //可以直接调用扩展方法Console.ReadKey();}}public class Person{public Person(int id, string name, int age){this.ID = id;this.Name = name;this.Age = age;}public int ID{get;set;}public string Name{get;set;}public int Age{get;set;}}//声明扩展方法public static class PersonExtension{public static string FormatOutput(this Person p){return string.Format("ID:{0},Name:{1},Age:{2}",p.ID, p.Name, p.Age);}}
}

注意:如果要扩展的类中本来就有和扩展方法的名称一样的方法,编译器默认认为一个表达式是要使用一个实例方法,但如果没有找到,就会检查导入的命名空间和当前命名空间里所有的扩展方法,并匹配到适合的方法。

3、扩展方法的问题

使用扩展方法明显比使用传统方法要简单,不需要实例化,修改方法也不需要重新修改和编译,但也还是有一些问题:

1)扩展方法不能访问被扩展类的私有成员。

2)扩展方法会被扩展类的同名方法覆盖,所以实现扩展方法我们需要承担随时被覆盖的风险。

3)只有引入扩展方法坐在的命名空间后,扩展方法才可以使用。

4)扩展方法不具有override的能力,不会重载原有的方法。

注意:将实例方法调用在编译期改变为静态类中的静态方法调用,实际上扩展方法确实拥有静态方法所具有的所有功能。

更多推荐

C#中的扩展方法

本文发布于:2023-11-15 04:33:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1593718.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:方法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!