首先说明, C# 中的引用即为C++中的指针。
值类型:内置数据类型,自定义的struct,不包括string。它们分配在栈上,超出作用域自动销毁。
引用类型:自定义class或数组的实例以及string为引用类型,它们有一个引用(指针)指向它们。由GC负责回收。
装箱:将值类型转换为引用类型的过程称为装箱
int i = 67; // i is a value type
object o = i;
以上代码会在堆上创建一个i;
ref 和 out关键字
类似于C++中的&引用,减少传值时的性能消耗,主要用在struct上。但是C#中不能创建const ref,out 和ref的区别仅在于使用out时必须进行赋值
void SetToTen(out int number)
{
// If this line is not present, the code will not compile.
number = 10;
}
Array 数组
普通的数组,不过需要使用new在堆上创建
int[] test = new int[size];
里面可以存放值类型或引用类型。
ArrayList
ArrayList test = new ArrayList();
test3.Add("chen");
test3.Add("j");
test3.Add("d");
test3.Add("is");
变长数组,和C++中的std::vector不同的是它可以存放不同类型的数据,意思就是内部它都会转化为object类型。
它的缺点是:
数据类型不安全,涉及到父类指针指向子类对象的问题。
添加值类型时会发生装箱操作。
list<T>
完全类似于C++ 中的std::vector 可以当做vector来使用。
List<string> test = new List<string>();
LinkList<T>
类似于std::forward_list<T>
Queue<T>和Stack<T>
类似于std::queue和std::stack
Dictionary<K,T> 字典
类似于std::unordered_map, 内部用hash实现,链表处理冲突,时间复杂度低,空间复杂度大。
Copyright © 2004-2024 Ynicp.com 版权所有 法律顾问:建纬(昆明)律师事务所 昆明市网翼通科技有限公司 滇ICP备08002592号-4