C# 类扩展方法
来源:互联网 发布:淘宝分销怎么发货模板 编辑:程序博客网 时间:2024/06/04 18:17
C# 类扩展方法
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用
下面以一个代码例子说明
定义一个 Npc 类
// 定义 Npc 类 public class Npc { //定义字段变量 private int npcId; private string name; public Npc() { } //定义字段变量对应的属性 public int NpcID { get { return npcId; } set { npcId = value; } } public string Name { get { return name; } set { name = value; } } }
使用Npc 类的时候想调用一个同时设置 NpcId 和 Name 的方法,但是定义 Npc 类的时候没有写这样一个方法。怎么办呢,可以直接在 Npc 类中添加一个这样的方法,也可以从Npc 类派生出一个 子类,然后在子类中添加一个满足需求的方法。还有一种方法就是今天要说的直接在 Npc 类中扩展出一个方法。
下面代码直接给 Npc 类扩展出来一个新的方法
// 扩展 Npc 类 public static class ExtendNpc { // 给 Npc 类扩展一个方法 // SetIDName(this Npc npc, int id, string name) public static void SetIDName(this Npc npc, int id, string name) { npc.NpcID = id; npc.Name = name; } }
使用如下
class Program { static void Main(string[] args) { // 实例一个 Npc 对象 Npc npc = new Npc(); // Npc 类对象就可以直接调用扩展方法了 npc.SetIDName(1000, "HeHe"); int npcId = npc.NpcID; string name = npc.Name; Console.WriteLine("npcId :" + npcId); Console.WriteLine("name :" + name); Console.ReadLine(); } }
上面方法轻松实现给 Npc 类添加一个SetIDName
方法
扩展方法要点:
一、定义的扩展类必须为静态类如上 public static class ExtendNpc
。
二、定义的扩展方法必须为静态方法如上 public static void SetIDName(this Npc npc, int id, string name)
。
三、扩展方法的第一个参数必须使用 this
指定该方法用于那种类型如上SetIDName(this Npc npc, int id, string name)
该方法只能 Npc 类的对象调用。
四、如果 Npc 类本身已经定义了一个 SetIDName
方法,则扩展方法中的 SetIDName
无效,即如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。
建议:
只建议你无法更改源代码来扩充你需要的方法时实现扩展方法,并谨慎地实现。只要有可能,最好重构原始类,或从现有类派生子类来达到这一目的。使用类源代码的更改可能会导致扩展方法失效。
0 0
- C# 类扩展方法
- C# 类的扩展方法
- C# 扩展类的方法
- C#扩展方法集合类
- C#扩展类的另一种方式:扩展方法
- C#中扩展类和扩展方法的使用
- C# 扩展系统类string的方法
- C# 类、结构与扩展方法
- C# 扩展系统类string的方法
- C#扩展方法类库StringExtensions
- unity/C#中扩展方法类
- c#中的扩展方法
- C# 扩展方法
- C#扩展方法本质
- C#扩展方法
- 关于C#扩展方法
- C#之扩展方法
- C#2008扩展方法
- 单层感知器的学习与练习
- Codeforces 616A
- NSLayoutConstraint-代码实现自动布局的函数用法说明
- 通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例
- cron
- C# 类扩展方法
- java实体类转Json
- 一个Servlet来替代多个Servlet_(2)
- 《你的知识需要管理》读书笔记
- eclipse无法连接Android设备
- IOS #define和预编译指令
- 教程的网址
- WebView 学习
- 在eclipse开发工具中使用JUnit4进行单元测试详解(四)常用元数据