c# - 数据类型之值类型,引用类型

版权声明:该文章由一只肥鸦的博客(https://blog.csdn.net/qq_40674821)编辑,转载请声明 https://blog.csdn.net/qq_40674821/article/details/82749942

c#数据类型分为值类型(Value types),引用类型(Reference types),以及指针类型(Pointer types),而指针类型只在不安全的代码中使用,本文不讨论指针类型。


值类型的引用的本质是拷贝(copy),是创造一个新的内存单元来存储,新内存单元的改变不会影响到被拷贝对象如

Vector3 pos = transform.position;
pos = new Vector3(0, 2, 0);

新建变量pos的任何改变都不会影响到transform中的position,因为它们是完全不同的内存单元,就像住在两个不同的屋子里。

引用类型则是内存地址指向被引用对象的内存地址,换句话说,就是它们之间其实调用的是同一个内存单元

 Transform tran = transform;
 tran.position = new Vector3(0, 2, 0);

所以,变量tran的一切变化都会直接改变transform,因为它们其实共享同一个内存单元,就像住在同个屋子。

       //Value type variable,物体的位置不变
        Vector3 pos = transform.position;
        pos = new Vector3(0, 2, 0);
        
        //Reference type variable,物体的位置变化了
        Transform tran = transform;
        tran.position = new Vector3(0, 2, 0);

这里只讨论值类型与引用类型的具体分类:

值类型,包括简单类型(如字符型,浮点型和整数型等),枚举类型和结构型。

简单类型有:主要有整型(有符号整形:sbyte,short,int,long;无符号整形:ubyte,ushort,uint,ulong),浮点类型(float,double),小数类型(decimal),布尔类型(bool),字符型 (char)

枚举类型:是使用 enum 关键字声明的类型。

扫描二维码关注公众号,回复: 4888771 查看本文章
enum <enum_name>
{ 
    enumeration list 
};
  • enum_name 指定枚举的类型名称。

  • enumeration list 是一个用逗号分隔的标识符列表。

  • 使用点操作符(".")引用。

//定义
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };

//使用
int WeekdayStart = (int)Days.Mon;

结构类型:是使用 struct 关键字声明的类型。

struct struct_name
{
    public int id;
    public string name;
};

使用点操作符引用。

(ps:Vector3、Quaternion是结构类型。)


引用类型包括类类型(所有其他类型的最终基类object,字符串string,自定义的class),接口类型(使用interface定义的类型),数组类型(一维数组int[]和多维数组int[][]),委托类型(delegate定义的类型)

类类型

Transform tran = transform;
 tran.position = new Vector3(0, 2, 0);

最常见的就是Classes下的Transfrom和GameObject。

接口类型

interface interface1
{  
 void show();  
}  

接口只有方法,但所有方法中没有执行代码

数组类型

一维数组:

int[] a={0,1,2};
//等价于
int[] a=new int[] {0,1, 2};

二维多维数组:

//创建一个2行三列的二维数组
int[,] a = new int[2, 3];
//三维数组
int[, ,] = new int[2, 3, 4};

交错数组:

int[][] a = new int[3][]
//必须初始化a的元素后才可使用它,初始化操作有以下:
//每个元素都是一维整数数组。 第一个元素是由5个整数组成的数组,第二个是由4个整数组成的数组,以此类推
a[0] = new int[5];
a[1] = new int[4];
a[2] = new int[2];
//或者直接填充数组:
a[0] = new int[] { 1, 3, 5, 7, 9 };
a[1] = new int[] { 0, 2, 4, 6 };
a[2] = new int[] { 11, 22 };
//
 int[][] a = new int[][]
{
    new int[] {1,3,5,7,9},
    new int[] {0,2,4,6},
    new int[] {11,22}
};//这里等号后面的new int[][]可省略,即写成:    
int[][] a = 
{
    new int[] {1,3,5,7,9},
    new int[] {0,2,4,6},
    new int[] {11,22}
};

委托类型

delegate double ParocessDelegate(double param1,double param2);

猜你喜欢

转载自blog.csdn.net/qq_40674821/article/details/82749942