队列Queue
使用方式和栈类似
入队、出队
Peek队头的数据
Dequeue 出队(从队头开始)
Contains()
Count
队列Queue
使用方式和栈类似
入队、出队
Peek队头的数据
Dequeue 出队(从队头开始)
Contains()
Count
myTS.clear(); //清空
myTS.Contains() //是否包含某个数值(返回布尔)
myTS.Counts //栈内的数值
CopyTo 将栈里面的数值复制到Array中
ToArray 把栈转换成一个数组
使用栈
创建栈(必须制定泛型)
Stack<int> myTS =new Stack<int>();
入栈、出栈
myTS.Push(1);
遍历栈
foreach (int in myTS) // 但是会显示后进
myTS.Peek(); //获取栈顶(返回值)
myTS.Pop(); // 出栈(返回当前栈顶的数值)
出栈的时候会把栈顶的数据移除
Hashtable
Dictionary 必须制定泛型
键值对:key-value
指定两个泛型Dictionary<int,string> myDB=
在字典内取值前先判断是否存在(可以使用.ContainsKey来检测是否存在)
key必须唯一
遍历字典,键值对存储的方式
foreach(KeyValuePair<int,string> myValue in myList){};
myValue.key
myValue.Value
myList.Keys //返回的是一个集合类,所有的key的集合
KeyCollection (相当于一个List)的使用
同样 myList.Values //返回所有的值的集合
删除,根据Key来进行删除
myList.Remove(2);
如果remove一个不存在的键值,则无事发生
实际运用:
1、创建道具类Item
2、创建各种属性变量(Id Name HP MP等等)
3、利用变量创建构造函数
4、创建字典,Key为Id,Value为一个Item实例
5、增加物品
myDict.Add(1001,new Item(1001,"物品名",100,0,0));
使用List必须使用泛型
List<string>
方法二:创建一个数组,把数组当成参数传入list
myList.Add();
遍历数组
foreach(string item in list)
MyList.Capacity 最大容量
MyList.Count
列表类内保存了一个数组,会自动扩容
MyList.Remove
MyList.Insert
MyList.RemoveRange
MyList.IndexOf
MyList.Contains()//返回布尔值
List 必须使用泛型(使用最多)
ArrayList
LinkedList 使用链式存储
数组Array
Equals() 继承自object
int 比较数值
string比较静态存储区
类比较引用
类里面重写Equals,比较类里面的值
强制类型转换:(类型名字)类
使用Equals()来判断两个变量是否相同(高级版的==)
Array.Sort()方法可以进行排序
系统自带的list,如果超出范围后,会进行预处理的报错
throw 抛出异常,new,System.ArgumentOutOfRangeExcption("报错信息");
如果命名空间已有了System,则不需要加System
IndexOutOfRangeException
ArgumentOutOfRangeException
修复 IndexOutOfRangeException
:检查循环边界和集合访问逻辑。
使用 ArgumentOutOfRangeException
:在公共方法中验证参数,明确约束(如 if (param < 0) throw ...
)。
集合访问差异:List<T>
的索引器会抛出 ArgumentOutOfRangeException
(手动验证),而数组会抛出 IndexOutOfRangeException
(自动抛出)。
泛型方法使用方式类似
1、创建方法的时候加上T
public static int GetSum<T>(T a,T b){};
2、使用方法的时候指定类型
GetSum<int>(23,45);
如果是writeline一个类,或者让一个类tostring,则会打印出这个类的命名空间等信息
可以在类中重写tostring的方式,来让这个函数输出类中的变量的(因为tostring是object的类,而object是所有类的基类
泛型:泛型类、泛型方法
处理不同数据类型
使用方法:
1、在创建类的时候,使用 T来代替各种类型(例如:int、string、double等等)
class ClassA<T>{ };
2、将类中声明的变量改成T(可以是任意类型)
3、实例化的时候,指定一个类型,后面的执行就会使用这个类型来进行处理
ClassA<int> a = new ClassA<int>();
注意:课程中的例子,将两个参数相加,但实际上T类型的无法相加,所以通过转换成dynamic来处理
for循环
foreach遍历
Console.WriteLine(列表名称); 可以直接输出当前的类型的命名空间泛型等信息
列表内容有一个数组
随着往列表内添加内容,列表容量会自动扩增:0、4、8、16依次增加
把原有的数组销毁,新增一个新的数组放入(使用Array.Copy())
可以预先制定容量大小,避免重复的消耗和复制,节省性能消耗
使用Capacity来设置、获取容量
intList.Capacity = 10;
集合类和数组的区别
引用集合类的命名空间system.Collections.Generic;
List<int> listName = new List<int>(){ 放初始值 };
<> 泛型类
使用方法和数组类似
内置Count变量(计数器)
for 循环进行遍历
接口中的方法一定是public
结构体放置在栈中
类实例放在堆中
先执行父类的构造函数,再执行子类的构造函数
2025/6/28
2025/6/28
接口中不能包含函数体,即使是空的函数体也不行。
子类中用new,隐藏方法:原来父类中的方法还在。
虚函数override了之后,原来父类中的方法不存在了。