一、类型
类型主要分为两种:值类型(value type)和引用类型(reference type)。
值类型进一步分为:简单类型(simple type)、枚举类型(enum type)、结构类型(struct type)、为空类型(nullable type);
引用类型进一步分为类类型(class type)、接口类型(interface type)、数组类型(array type)、委托类型(delegate type)。
如下表:
类别 | 说明 | |
值类型 | 简单类型 | 有符号整型:sbyte short int long |
无符号整型:byte ushort uint ulong | ||
Unicode字符:char | ||
IEEE浮点型:float double | ||
高精度小数型:decimal | ||
布尔:bool | ||
枚举类型 | enum E {...}形式的用户定义的类型 | |
结构类型 | struct S {...}形式的用户定义的类型 | |
为空类型 | 其他所有具有null值的值类型的扩展 | |
引用类型 | 类类型 | 所有其他类型的最终基类:object |
Unicode字符串:string | ||
class C{...} 形式的用户定义的类型 | ||
接口类型 | interface I{...}形式的用户定义的类型 | |
数组类型 | 一维和多维数组,如:int[]和int[,] | |
委托类型 | delegate in to D{...}形式的用户定义的类型 |
值类型精度范围:
类别 | 类型 | 位数 | 范围/精度 |
有符号整型 | sbyte | 8 | -128~127 |
short | 16 | -32768~32767 | |
int | 32 | -2147483648~2147483647 | |
long | 64 | -9223372036854775808~9223372036854775807 | |
无符号整型 | byte | 8 | 0~255 |
ushort | 16 | 0~65535 | |
uint | 32 | 0~4294967295 | |
ulong | 64 | 0~18446744073709551615 | |
浮点型 | float | 32 | 1.5*10的-45次方~3.4*10的38次方,7位精度 |
double | 64 | 1.5*10的-324次方~3.4*10的308次方,15位精度 | |
十进制小数 | decimal | 128 | 1.0*10的-28次方~7.9*10的28次方,28位精度 |
类类型定义了一个包含数据成员(字段)和函数成员(方法、属性)的数据结构。类类型支持单已继承和多态,这些派生类可用来扩展和专用化基类的机制。
结构类型与类类型相似,表示一个带有数据成员和函数成员的结构。不同的是,结构是一种值类型,且不需要堆分配。结构类型不支持用户指定继承,且所有结构类型都隐式地从类型object继承。
接口类型定义了一个协定,作为一个公共函数成员命名集。实现某个接口的类或结构必须提供该接口的函数成员的实现。一个接口可以从多个基接口继承,而一个类或结构可实现多个接口。
委托类型表示对具有特定参数列表和返回类型的方法的引用。通过委托,我们能够将方法作为实体复制给变量和作为参数传递。未退类似于在其他某些语言的函数指针的概念,但是与函数指针不同,委托是面向对象的,并且是类型安全的。
枚举类型是具有命名常量的独特类型。每种枚举类型都具有一个基础类型,该基础类型必须是8钟整型之一。枚举类型的值集和它的基础类型的值集相同。
二、变量
变量分为:静态变量、实例变量、数组元素、值参数、引用参数、输出参数、局部变量。
例子
class A
{
public static int x;
int y;
void Func(int[] v ,int a, ref int b,out int c)
{
int i = 1;
c = a + b++;
}
}
如上面的例子:x是静态变量、y是实例变量、v[0]是数组元素、a是值参数、b是引用参数、c是输出参数、i是局部变量。
静态变量:用static修饰符声明的字段称为静态变量。
实例变量:未用static修饰符声明的字段成为实例变量。
数组元素:在创建数组是实例时开始存在,在没有对该数组实例的引用时停止存在。
值参数:未用ref或out修饰符声明的参数,值参数在调用该形参所属的函数成员。
引用参数:用ref修饰符声明的参数。不创建新的存储位置。表示对该函数成员或匿名函数调用中以实参形式给出变量所在的存储位置。因此,引用参数的值总是与基础变量相同。
输出参数:用out修饰符声明的形参是输出参数。输出参数不创建新的存储位置,而输出参数表示对该函数成员或委托调用中以实参形式给出的变量所在的存储位置。因此,输出参数的值总是与基础变量相同。
局部变量:可通过local-variable-declaration来声明,此声明可以出现在语句块(block)、for语句(for-statement)、switch语句(switch-statement)或using语句(using-statement);也可由foreach语句(foreach-statement)或try语句(try-statement)的catch(specific-catch-clause)语句来声明。