【Unityc#专题篇】之c#进阶篇


‍个人主页:@元宇宙-秩沅

‍ hallo 欢迎 点赞 收藏⭐ 留言 加关注✅!

本文由 秩沅 原创

‍ 收录于专栏unity之c#专题篇

【Unityc#专题篇】之c#进阶篇_第1张图片


️Unity之c#专题篇——【进阶章】

️系统路线点击跳转


⭐[【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


前言


进阶之路


A 数组的基类—Array类


集合 和 数组 的 区别 : 数组 的长度是固定的。 集合 的长度是可变的。 数组 中存储的是同一类型的元素,可以存储基本数据类型值。 集合 存储的都是对象。 而且对象的类型可以不一致。

  • 1.概念

Array 类是 C# 中所有数组的基类,它是在 System 命名空间中定义。Array 类提供了各种用于数组的属性和方法,可看作扩充了功能的数组(但不等同数组),可以使用Array类的属性来对数组进行各种操作。

  • 2.方法
    【Unityc#专题篇】之c#进阶篇_第2张图片

  • 3.属性:
    【Unityc#专题篇】之c#进阶篇_第3张图片

  • 4.Array.Reverse()-需要反转字符串时

 String B ="12345";
 char [] A = B.TocharArray();
 Array.Reverse(A);
 String B = new string(A);

B简单数据集合——容器ArrayList


  • ArrayList,Array,LinkedList优缺点

  • 思维导图
    【Unityc#专题篇】之c#进阶篇_第4张图片

  • API

初始化容量: ArrayList xx = new ArrayList(number);
补充: arraryList 是可以通过下标来获取对象的
【Unityc#专题篇】之c#进阶篇_第5张图片


C简单数据集合——容器Stack


【Unityc#专题篇】之c#进阶篇_第6张图片


D简单数据集合——容器Queue类


【Unityc#专题篇】之c#进阶篇_第7张图片

  • 所以什么时候用到栈和队列呢?
    首先在满足 先进后出或者 先进先出的存取规则之后
    也考虑到 只 存取 对象的 不需要修改和删除对象的操作
  • 这个时候栈和队列才适合

E简单数据集合——容器Hashtable类(散列表)


【Unityc#专题篇】之c#进阶篇_第8张图片

【Unityc#专题篇】之c#进阶篇_第9张图片


F简单数据集合小结


  • 都在相同的命名空间:using System.Collections;
  • 本质上都是Object的数组,存在拆箱装箱的缺点

G泛型


【Unityc#专题篇】之c#进阶篇_第10张图片

  • 三大类
    【Unityc#专题篇】之c#进阶篇_第11张图片
    【Unityc#专题篇】之c#进阶篇_第12张图片
  • 好处

    1.能够使得不同对象执行同一逻辑操作——(也是什么时候用泛型的前提)
    2.若是泛型方法,直接用泛型当作参数传递了,()里面就不用写了
    3.避免了装箱拆箱的操作

H泛型约束


【Unityc#专题篇】之c#进阶篇_第13张图片
泛型约束应用:

  • 单例模式的优缺点

    1优点: 只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象适合需要被公用的场合使用,如多个模块使用同一个数据源连接对象等等
    2缺点: 就是不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态

用单例模式,就是在适用其优点的状态下使用


II常用泛型数据结构类——List泛型类


【Unityc#专题篇】之c#进阶篇_第14张图片
【Unityc#专题篇】之c#进阶篇_第15张图片


L常用泛型数据结构类——Dictionary泛型类


【Unityc#专题篇】之c#进阶篇_第16张图片
【Unityc#专题篇】之c#进阶篇_第17张图片

  • hashtable的遍历 和 Dictionary 遍历API的区别对比
    +【Unityc#专题篇】之c#进阶篇_第18张图片

J数据结构存储方式——顺序存储和链式存储


【Unityc#专题篇】之c#进阶篇_第19张图片
【Unityc#专题篇】之c#进阶篇_第20张图片


K常用泛型数据结构类——LinkedList泛型类


【Unityc#专题篇】之c#进阶篇_第21张图片
【Unityc#专题篇】之c#进阶篇_第22张图片


L常用泛型数据结构类——泛型栈和队列


  • 本质API和Stack类Queue类一样,加上了泛型
  • 并且前者再system.collection命名空间里
  • 后者在system.collection,Generic里

M常用数据容器的不同应用情况


总结数组,list,Dectionary,Stack,Queue,LinkedList等存储容器。我们怎么来使用

  • 数组:简单的数据类型存储的时候,或者只需要查改数据的时候

  • List:它是ArraryList的泛型升级,适合一切对象的存储,适合查改的情况下使用

  • LinkeList:它是泛型双向链表,适合频繁增删的数据对象的情况下使用
    【Unityc#专题篇】之c#进阶篇_第23张图片

  • Dectionary:它是Hashtable的泛型升级,适合键值对象的存储
    【Unityc#专题篇】之c#进阶篇_第24张图片

  • Stack:适合先进后出的情况下使用

  • Queue:适合先进先出的情况下使用
    【Unityc#专题篇】之c#进阶篇_第25张图片


N委托和事件——委托


【Unityc#专题篇】之c#进阶篇_第26张图片

【Unityc#专题篇】之c#进阶篇_第27张图片

  • 相当于老板把活儿都安排好了,分给谁做,谁做多个,谁做少的
  • 某个对象要执行别人安排的一系列方法的时候可以选择用委托

O委托和事件——事件


【Unityc#专题篇】之c#进阶篇_第28张图片


  •  public Action  WarmDoEvent1;    //无返回值无参
     public Action WarmDoEvent2;  //无返回值有两个int的参数
     public Func WarmDoEvent3;        //有int类型的返回值,无参
     public Func WarmDoEvent4;   //有int类型的返回值,有一个string的参数
     ------------------------------------------------------------------
     +
    

委托和事件的原则:
1.委托什么类型有参有无返回值,它传入的函数和它是一致的
2.了解系统自带四个委托类型的实质是什么
3.变成事件的委托,无法在自身对象外面被置空(赋值)或被调用,但是+= 和 -+ 可以
4.而没有变事件的委托就不安全了 ,它就可以在外面被调用,有置空的风险
5.所以事件存在,让委托更安全了
6.用委托的时候能用事件就更好


P委托和事件——匿名函数


【Unityc#专题篇】之c#进阶篇_第29张图片
【Unityc#专题篇】之c#进阶篇_第30张图片

【Unityc#专题篇】之c#进阶篇_第31张图片

  • 相当于delegate是函数名 ,()是放参数列表的 ,{代码逻辑} 是方法体

Q委托和事件——Lambda表达式


![

](https://img-blog.csdnimg.cn/6f2d17f530854c7a85f0521529246276.png)

【Unityc#专题篇】之c#进阶篇_第32张图片

【Unityc#专题篇】之c#进阶篇_第33张图片

  • 闭包的条件
    【Unityc#专题篇】之c#进阶篇_第34张图片
  • 闭包的特点
    【Unityc#专题篇】之c#进阶篇_第35张图片
  • 父类函数最终值情况的消灭
    【Unityc#专题篇】之c#进阶篇_第36张图片

R委托和事件——补充(返回委托数组)


  • 因为我们使用委托添加有返回值的函数时,当调用委托后,它并不会获取到每一个有返回值函数的返回值,它只是执行所有存在委托中的函数

如果想要获取到每一个函数执行后的返回值

  • 知识点:委托容器中存在方法 GetInvocationList() 可以返回一个委托数组

  • 当有返回值的容器存储多个函数时,想要一一得到其返回值的情况

class Program
    {
        //当有返回值的容器存储多个函数时,想要一一得到其返回值的情况
       static public Func<int >  Print()
        {
            Func<int> action = null;
            for (int i = 1; i <= 10; i++)
            {
                int index = i;
                action += () => {
                Console.WriteLine("第{0}个函数",index);
                    return index*100 ;
                };
            }
            return  action;           
        }
        static void Main(string[] args)
        {
            Func<int> text = Print();
            text();
            // Print()();//一步到位的写法
            foreach (Func<int> item in text.GetInvocationList() )
            {
                Console.WriteLine(item());
            }
        }
    }

S委托和事件——List排序相关


【Unityc#专题篇】之c#进阶篇_第37张图片


T协变和逆变


【Unityc#专题篇】之c#进阶篇_第38张图片【Unityc#专题篇】之c#进阶篇_第39张图片


U多线程


【Unityc#专题篇】之c#进阶篇_第40张图片

【Unityc#专题篇】之c#进阶篇_第41张图片
【Unityc#专题篇】之c#进阶篇_第42张图片


V预处理指令


【Unityc#专题篇】之c#进阶篇_第43张图片

【Unityc#专题篇】之c#进阶篇_第44张图片

W反射


——(前面用不到,只是用来理解unity)

  • 编译器的作用
  • 源语言程序员
  • 目标语言程序
    【Unityc#专题篇】之c#进阶篇_第45张图片
    【Unityc#专题篇】之c#进阶篇_第46张图片
    【Unityc#专题篇】之c#进阶篇_第47张图片

  • 一.Type类
    【Unityc#专题篇】之c#进阶篇_第48张图片
    【Unityc#专题篇】之c#进阶篇_第49张图片
    【Unityc#专题篇】之c#进阶篇_第50张图片
    【Unityc#专题篇】之c#进阶篇_第51张图片

  • 二.Assembly类

【Unityc#专题篇】之c#进阶篇_第52张图片


  • 三.Activator类
    【Unityc#专题篇】之c#进阶篇_第53张图片

X特性


【Unityc#专题篇】之c#进阶篇_第54张图片


常见的特性如下:

  • 限制加持范围的特性
    【Unityc#专题篇】之c#进阶篇_第55张图片
  • 标记过时提示的特性
    【Unityc#专题篇】之c#进阶篇_第56张图片
  • 提示调用者信息的特性

【Unityc#专题篇】之c#进阶篇_第57张图片

  • 预处理条件编译的特性
    【Unityc#专题篇】之c#进阶篇_第58张图片

  • 外部调用DLL包的特性
    【Unityc#专题篇】之c#进阶篇_第59张图片

  • 特性的本质:

  • 特性的语法

  • 特性的使用
    【Unityc#专题篇】之c#进阶篇_第60张图片


Y迭代器


【Unityc#专题篇】之c#进阶篇_第61张图片


Y特殊语法总结


【Unityc#专题篇】之c#进阶篇_第62张图片
【Unityc#专题篇】之c#进阶篇_第63张图片
【Unityc#专题篇】之c#进阶篇_第64张图片
【Unityc#专题篇】之c#进阶篇_第65张图片


⭐相关文章⭐


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习

⭐本站最全-unity常用API大全(万字详解),不信你不收藏



你们的点赞 收藏⭐ 留言 关注✅是我持续创作,输出优质内容的最大动力!

你可能感兴趣的:(#,c#,学习,unity)