关于结构体和类的区别:
借助类(class),两个变量可以引用同一个对象,因此,对一个变量执行的运算可以会影响到另一个变量的引用。
class print1
{
public int x;
public int y;
public print1(int x, int y)
{
this.x = x;
this.y = y;
}
}
借助结构体(struct),每个变量都有自己的数据副本,因此,对一个变量执行的运算不会影响到两一个变量
struct print
{
public int x;
public int y;
public print(int x, int y)
{
this.x = x;
this.y = y;
}
}
class Program
{
static void Main(string[] args)
{
print p = new print(10, 10); //值不变
print b = p;
p.y = 20;
Console.WriteLine(b.x);
print1 p1 = new print1(10, 10); // 值变
print1 b1 = p1;
p1.x = 20;
Console.WriteLine(b1.x);
}
}
委托的关键字:delegate:
namespace DelegateDemo
{
// 创建一个委托类型使用关键字delegate(委托)
public delegate void getDelegate(string str);
class Program {
static void Fun1(string s)
{
Console.WriteLine("这是方法一:{0}", s);
}
static void Fun2(string s)
{
Console.WriteLine("这是方法二:{0}", s);
}
static void Main(string[] args)
{
getDelegate x, y;
x = Fun1;
y = Fun2;
x("1");
y("2");
}
}
}
值类型和引用型推栈存储:
值类型都会存储在栈中,
引用类型首先会把引用的地址存储在栈中,指向->在堆中开辟一块空间的元素或者对象;当引用的地址弹栈时,堆中的元素会被GC回收
引用类型赋值:
string str1 = "str1";
string str2 = "str2";
str1 = str2;
赋值的时候赋值的引用地址,而不是堆内存,当str2赋值给str1时候;str2就会被销毁,指向的堆内存被回收
如果数组是一个值类型,那么数组中直接存储值,如果是一个引用类型的数组(数组中存储的是引用类型),那么数组中存储的是引用(内存地址)
Vector[] vector = new Vector[]{new xxx(),new xxx(),new xxx()}; // 引用类型的数组