命名空间
我们可以认为类是属于命名空间的,如果当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间。
1.光标去点击
2.alt+shift+f10
3.记住直接写
当我们需要在一个项目中引用另一个项目的类的时候,首先需要添加引用
然后再引用命名空间
值类型和引用类型
值类型:int double bool char decimal struct enum
引用类型:string 自定义类 数组 object 接口
值类型和引用类型在内存上存储的地方不一样:值类型的值是存储在内存的栈中,引用类型的值是存储在内存的堆中。
在传递值类型和传递引用类型的时候,传递的方法不一样:值类型我们称之为值传递,引用类型我们称之为引用传递。
值类型在复制的时候,传递的是这个值本身。
引用类型在复制的时候,传递的是对这个对象的引用。他们指向的是同一块空间,操作哪一个另一个都会改变。
ref参数的实现原理
相当于把number的地址复制给n,栈中地址相同了。相当于同一块空间了,改变哪个,另一个都会改变。
字符串
字符串具有不可变性:当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟了一块空间存储新值。
这样会出现一个问题,当你对一个字符串大量的重新赋值的时候,就会产生很多内存垃圾。当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,立即把它销毁。
结合引用传递,s1和s2分别是什么?
string s1 = "zs";
string s2 = s1;
s2 = "ls";
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.ReadKey();
由于字符串具有不可变性,所以s2开辟了另一块空间,s1是zs,s2是ls。
我们可以将字符串看做是char类型的一个只读数组。
string s = "abcdefg";
//s[0] = 'b'; 不能这样做