zoukankan      html  css  js  c++  java
  • C# 类扩展方法

    扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
    扩展方法要点:
    一、定义的扩展类必须为静态类如上
    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无效,即如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。

    建议:
    只建议你无法更改源代码来扩充你需要的方法时实现扩展方法,并谨慎地实现。只要有可能,最好重构原始类,或从现有类派生子类来达到这一目的。

      // 定义 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 类
        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();
            }
        }

     

     

     

  • 相关阅读:
    【腾讯Bugly干货分享】微信Tinker的一切都在这里,包括源码(一)
    【腾讯Bugly干货分享】iOS10 SiriKit QQ适配详解
    【腾讯Bugly干货分享】安卓单元测试:What, Why and How
    【腾讯Bugly干货分享】Android Linker 与 SO 加壳技术
    【腾讯优测干货分享】Android内存泄漏的简单检查与分析方法
    【腾讯Bugly经验分享】程序员的成长离不开哪些软技能?
    【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
    从零开始安装Hadoop视频教程
    如何在MAC机器中实现移动设备WiFI上网(没有专门的无线路由器的情况)
    Alfresco安装与配置图解
  • 原文地址:https://www.cnblogs.com/wfy680/p/14361906.html
Copyright © 2011-2022 走看看