程序老鸟C#学习:3天学会全部基础--第三天

Posted 芝麻粒儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序老鸟C#学习:3天学会全部基础--第三天相关的知识,希望对你有一定的参考价值。

往期文章分享

点击跳转=>熬夜再战android从青铜到王者-UI组件快速搭建App界面
点击跳转=>熬夜再战Android从青铜到王者-几个适配方案
点击跳转=>熬夜再战Android从青铜到王者-开发效率插件篇
点击跳转=>Unity粒子特效系列-龙卷风预制体做好了,unitypackage包直接用!
点击跳转=>姐姐喊我解锁套娃新技能:FairyGUI在Unity中实现List嵌套List/立体画廊等,玩出花儿来
点击跳转=>Unity新手必备5款宝藏插件–价值上千元白嫖最新版

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

👉前提


点击跳转=>程序老鸟C#学习:3天学会全部基础–第一天
点击跳转=>程序老鸟C#学习:3天学会全部基础–第二天

👉实践过程

😜命名空间

Namespace这玩意就是用来方便管理的,而且在计算机中相同的设计思想到处可见,比如同一个文件夹下不同有同名的文件,你放在不同文件夹下可以有同名文件。
其他编程语言比如Java有包路径,不同路径名字可以有同名的类。这种思想方便管理文件/代码。

namespace first_space
{
   class namespace_cl
   {   }
//比如这样,程序是会报错的
   class namespace_cl
   {   }
}
//但是你是下面的状态就不会报错
namespace first_space
{
   class namespace_cl
   {   }
}
namespace second_space
{
   class namespace_cl
   { }
}

到这有的人就开始有疑问了:如果是不同的文件或者想访问其他的空间怎么办呢?
细心的已经发现了,就和Java的导包一样,C#使用using导入空间,在每个编程文件的最上面几行都是这样的引入,想要哪些空间的功能导入哪个。
这时候又有人有疑问了,能不能修仙小说那样天外有天,天上还有天。能不能命名空间套命名空间,套套套,此处禁止套娃。
答案是可以的,引入的时候:using namespaceone.namespacetwo 用英文符号.即可,跟Java包路径同理。

😜预处理器

从字面理解就是提前对信息进行处理。她确实也是这样的,她会根据你指定的条件,只编译满足条件的代码,不满足条件的代码不编译。既区分了软件版本,代码还在一块,管理方便。预处理指令是#开始的,且只能作为开头,一般指令单独占一行。都有哪些指令在这就不单独写了。在Unity中指令挺有用的,因为PC是键盘,Android事件是手势,用预处理提前写好不同端的不同实现代码(当然她们功能可能是一致的),打包发布的时候利人利己。

😜异常

哎呀,这个老四件套了:try、catch、finally 和 throw

  • try: 一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。
  • catch: 程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。
  • finally: finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
  • throw: 当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。

😜反射

通俗的讲就是可以访问一个类的所有属性和方法,且能够调用。有人提问了:随便写的public类不都是能任意访问调用的吗,这有什么区别
区别在于一个是正常写代码,你知道代码逻辑和内容,且都在你的掌控之内,当然能访问;而反射不同她能够访问你不清楚的类,比如三方框架你遇到这个框架里某个类某个方法没有对外开放,而你又需要使用,就可以用反射把她抛出来。

优点

  1. 反射提高了程序的灵活性和扩展性。
  2. 降低耦合性,提高自适应能力。
  3. 它允许程序创建和控制任何类的对象,无需提前硬编码目标类。

缺点

  1. 性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。
  2. 使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。

😜属性

总结一句话,和Java里实体的get/set方法一样的性质。

😜委托

使用关键字delegate来修饰,必须用new关键字来创建,且与某个特定方法关联。
比较官方的说法:表示对具有特定参数列表和返回类型的方法的引用。通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。 委托还类似于其他一些语言中存在的“函数指针”概念。 与函数指针不同,委托是面向对象且类型安全的。
按照自己的理解:委托就是包一个外壳,操作外壳就是调用壳内的内容。就好像老板让你板砖,你委托给另一个人让她板砖。这就是委托。
委托中还能通过加减号来实现多个,称之为多播。只有相同类型的委托可以合并。
使用场景:因刚需C#没什么实际经验,大家知道有什么好的实际应用环境吗

委托示例:

//这个是声明个委托
    delegate int NumberChanger(int n);
    static int num = 10;
    public static int AddNum(int p)
    {
        num += p;
        return num;
    }
    public static int MultNum(int q)
    {
        num *= q;
        return num;
    }

    static void Main(string[] args)
    {
        // 创建委托实例
        NumberChanger nc;
        NumberChanger nc1 = new NumberChanger(AddNum);
        NumberChanger nc2 = new NumberChanger(MultNum);
        // 使用委托对象调用方法
        nc1(25);
        Console.WriteLine("Value of Num: {0}", num);
        nc2(5);
        Console.WriteLine("Value of Num: {0}", num);
        //下面是组播 使用  +或- 符号操作
        nc = nc1;
        nc += nc2;
        // 调用多播
        nc(5);
        Console.WriteLine("Value of Num: {0}", num);
        Console.ReadKey();
       //输出结果为:
            //Value of Num: 35
            //Value of Num: 175
            //Value of Num: 75
}

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢欢迎点赞👍收藏🌟留言📝

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

以上是关于程序老鸟C#学习:3天学会全部基础--第三天的主要内容,如果未能解决你的问题,请参考以下文章

3天学会Vue之基本知识(第三天:单文件组件(vue-cli)):结合项目开发经验,总结最关键的内容

3天学会Vue之基本知识(第三天:单文件组件(vue-cli)):结合项目开发经验,总结最关键的内容

10天学会perl第三天——条件与循环

三天学会ZooKeeper第三天(全网最细)

5天学会jaxws-webservice编程第三天

三天学会css3基础知识