如果有错误之处,忘广大网友评论指正,我会及时修改!
定义
类型:类型定义了C#中数据的结构和行为。定义一个类型包括定义他的成员、基础类型、实现哪些接口,和类型所允许的操作。C#中有两种数据类型,数值类型和引用类型。
(1)数值类型: 数值类型的直接指向数据本身。每一个数值类型的变量每一个都有自己的数据副本,操作一个数值变量不会对其他变量造成影响。
(2)引用类型: 引用类型的数据存储的是数据的引用,又或者叫对象的引用。可以存在两个变量引用同一个对象,操作其中一个引用变量可能会对另一个引用指向的对象造成影响。
变量:变量相当于一个指向特定类型数据的符号。一个变量名就是一个标识,他是一个不带空格的unicode字符序列。如果以变量名以@为前缀,那么它可能是C#的保留关键字。保留关键字对于与其他语言交互很有用处。
数值类型详解
数值类型可以进一步划分成简单类型、枚举类型、结构体类型、空指针类型和与元组类型。
(1)简单类型
- 有符号整型: sbyte, short, int, long
- 无符号整型: byte, ushort, uint, ulong
- Unicode 字符: char(代表一个utf-16编码单元)
- IEEE 二进制浮点类型: float, double
- 高精度十进制浮点类型:decimal
- 布尔类型: bool(代表Boolean值,只能为true或者false)
(2)枚举类型
枚举类型是以enum E{...}形式定义的用户定义类型。枚举类型是具有命名常量的独特类型。每一个枚举常量都有一个上述八个整型类型之一隐藏类型。所以一个枚举类型的集合相当于其隐藏类型的集合。
(3)结构体类型
以struct S {...}形式定义的用户定义类型。
(4)空指针类型
其值为null的值类型的扩展
(5)元组类型
以(T1, T2, T3..)定义的用户定义类型
引用类型详解
引用类型可以被分为类、接口、委托类型。
(1)类类型
- 所有其他类型的最终的基类:object
- Unicode strings: string, 代表了一个UTF-6编码单元序列,或者说一个char序列
- 以class C {...}形式定义的用户定义类型
(2) 接口类型
以interface I {...} 形式定义的用户定义类型
(3)数组类型
一维数组,多维数组,交错数组:例如int[], int[,], 和int[][]。
提供一个交错数组的例子:
int[][] jagggedArray=
{
new int[]{1,2,3},
new int[]{4},
new int[]{5,6}
}
(4)委托类型(详细了解参考点击进入链接,类似于函数式变成,把函数当成变量使用)
以delegate int D(...)形式定义类型
概述
todo: 补充关于C#类型的概述
类、结构体、接口、委托类型都支持泛型,因此可以进行参数化设计。
Csharp支持支持任何类型的一维和多维数组。和其他类型不同,数组类型不用在他使用之前被声明。一个类型后面带上方括号就可以完成数组类型声明,例如int[]代表一个一维整型数组,int[,]代表一个二维整形数组,int[][]表示一个一维的一维整形数组的数组,也可以叫交错数组。
可为空的类型不需要单独定义。对于每一个费控类型T,都有一个相关联的可以存放null值的空类型T?。例如int?可以存放任何32位整数或者null值;string?可以存放字符串值和null值。
C#的类型系统是统一的,所以任何类型的值都可以当做object对待。C#中每一个类型都 直接或间接从object类型衍生出来,object是所有类型的最终基类。只要将引用类型的值视为类型对象,就可以将其视为对象。通过执行装箱和拆箱操作,将值类型的值视为对象。在下面的示例中,将int值转换为object,然后再转换回int。
using System;
namespace TypeDemoApplication {
class TypeDemo {
public static void Main (string[] args) {
int i = 1;
Console.WriteLine("int i = " + i);
object o = i; // boxing
Console.WriteLine("boxing object i = " + o);
int j = (int) i; //unboxing
Console.WriteLine("unboxing int j = " + j);
}
}
}
输出:
当一个值类型的值赋值给对象引用,将会有一个箱子分配出来存储这个值。这个箱子是引用类型的实例,值被复制到了箱子中;相反,当一个对象引用被强转成值类型,首先会检查装箱的值是否是对应的类型,如果是,箱子里面的值会被复制到值类型。