当前位置: 首页 > article >正文

C#核心(10)拓展方法

前言

我们先前将静态相关的东西已经大致全部讲完,我们继续来讲我们的封装部分的知识点,今天要讲的一个东西叫拓展方法。C#拓展方法在游戏开发中可以提供更灵活、可扩展的代码结构,使得开发者可以更方便地增加功能、调试和维护代码。同时,拓展方法也可以提高代码的可读性和重用性,使得游戏开发过程更高效。

基本概念

是为现有非静态变量类型添加新方法。

作用:

  1. 提升程序拓展性
  2. 不需要在对象中重新写方法
  3. 不需要通过继承来添加方法
  4. 为别人封装的类型写额外的方法

特点:

  1. 一定是写在静态类中

  2. 一定是个静态函数

  3. 第一个参数为拓展目标

  4. 第一个参数用this修饰 

基本语法

访问修饰符 static 返回值 函数名(this 拓展类名 参数名,参数类型 参数名,参数类型 参数名...)

 示例

这里博主为你写了两个简单的已有类型的拓展方法,一个int,一个string


using System;

namespace Tools
{
    public static class StringExtensions
    {
        //为int拓展一个成员方法
        //成员方法是需要实例化对象后才能使用的
        //value代表使用该方法的实例化对象
        public static void SpeakValue(this int value)
        {
            //拓展方法
            Console.WriteLine("我是"+value);
        }
        #region 任务一
        //请为int拓展一个阶乘运算的方法
        #endregion

        /// <summary>
        /// 为string拓展一个成员方法,反转
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string Reverse(this string input)
        {
            char[] chars = input.ToCharArray();
            Array.Reverse(chars);
            return new string(chars);
        }
        #region 任务二
        //请为string拓展一个查找的方法,要求只用一个参数
        #endregion
    }

    class Program
    {
        static void Main(string[] args)
        {
            //使用
            int value =0;
            value.SpeakValue();

            string input = "Hello World";
            string reversed = input.Reverse();

            Console.WriteLine(reversed);
        }
    }
}

然后我也为大家留下了练习任务,大家可以自己尝试去试一下,体会一下拓展方法的用处。

然后博主将再给大家写一个已有方法的拓展,为什么要讲这个,其实就是方便你未来工作,比如程序员a已经写了很多的一个类,你根本不想去看他的代码,那你就可以通过这个方法给自己拓展一个自己需要用到的功能就可以了。

下面是一个玩家示例:


using System;

namespace Tools
{
    public class Player
    {
        //定义一个Player的类
        public string Name { get; set; }
        public int Age { get; set; }
        public string ID { get; set;}

        public string password { get; set; }
    }
    public static class PlayerExtensions
    {
        //判断是否成年
        public static bool IsAdult(this Player player)
        {
            return player.Age >= 18;
        }
        #region 任务三
        //利用是否是成年人设计一个登录系统,要求用拓展方法设计一个id,password和输入的密码匹配的方法
        #endregion
    }


    class Program
    {
        static void Main(string[] args)
        {
            Player p = new Player { Name = "John", Age = 25 };//id,和password后续自行添加
            bool isAdult = p.IsAdult();
            Console.WriteLine($"{p.Name} is {(isAdult ? "an adult" : "not an adult")}.");
            
        }
    }
}

大家尽量去做博主给大家留下的人物,这是为大家练习编程特意设计的版块,因为博主发现如果我单纯给你讲理论,你可能是得不到什么进步的,倒不如我给出一些例子,让你多去练习,在练习中进步。

以后我也会在例子中留下一些任务,希望能给你提供到帮助。

总结

拓展方法其实不难,想毕你做完练习很快就可以上手,这是一个比较常用的小方法,你在日后的开发中也可以使用,但是拓展方法并非越多越好,如果你有能力在原先基础代码上写新的方法,就最好去原先代码上拓展,而不是这样外部封装一个拓展类,到时候功能会太散,导致阅读代码的成本上升。

编程不仅仅讲究算法的高级,也讲究效率的高级,所有提供给你的高级方法都是在效率上服务的,具体怎么使用还是要自己斟酌。

请期待我的下一篇博客!

我来自佑梦游戏开发,感谢你的关注和收藏!


http://www.kler.cn/a/404849.html

相关文章:

  • 当产业经济插上“数字羽翼”,魔珐有言AIGC“3D视频创作大赛”成功举办
  • 408代码类复习--八大排序
  • 「三」体验HarmonyOS端云一体化开发模板——使用DevEco Studio直接创建端云一体化工程
  • Python简介以及解释器安装(保姆级教学)
  • Llama模型文件介绍
  • WPF窗体基本知识-笔记-命名空间
  • 机器学习:智能技术的未来
  • Vue_Router权限控制:不同角色显示不同路由
  • MySQL基础大全(看这一篇足够!!!)
  • 解决.DS_Store 在项目一致无法排除,.gitignore里也不生效
  • C++ 网络编程:打造多线程 TCP 服务器,同时服务多个客户机!
  • Qt-常用的按钮控件 QPushButton QRadioButton QCheckBox
  • Kadane 算法 二维 详解
  • 如何创建一个网站?初学者的分步指南
  • 【Apache Paimon】-- 5 -- Flink 向 Paimon 表写入数据
  • 网络编程day2.2~day3——TCP并发服务器
  • TCP Listen 队列详解与优化指南
  • springboot基于大数据技术的电影推荐系统的设计与实现
  • 区块链预言机;预言机的部署、与智能合约的关系以及是否分布式;基于Fabric联盟链与链外世界的数据交互
  • Python 之网络爬虫
  • Spring Security SecurityContextHolder(安全上下文信息)
  • webpack进阶(二)
  • vue不刷新浏览器更新页面的方法
  • MacOS下的Opencv3.4.16的编译
  • pcap_set_buffer_size()函数
  • 使用Java爬虫时,有哪些性能优化技巧?