值类型
在前面一章中我们学习了一个简单的C#程序的主要构成,下面我们就来系统的学习的C#基础语法,首先学习的是数据类型中的值类型和引用类型,以及常变量。
值类型可以归类如下:简单类型,结构类型,枚举类型。它们是从类 System.ValueType 中派生的。
简单类型包括 整型(Intergral types)、小数型(Decimal types)、浮点型(Floating point types)、布尔型(Bool types)、字符型(Char types)。其中整型数据包含 int、 sbyte、 short、 ushort、 uint、 long、 ulong、 byte、char。
结构类型(struct)可以声明构造函数、常数、字段、属性、方法、索引、操作符和嵌套类型,我们将会在结构一章中具体来讲。
枚举类型(enum)是由一指定常量集合组成的独特的类型,我们也会在后面枚举一章中介绍。
比如 int、char、float,它们分别存储数字、字母、浮点数。当您声明一个 int 类型时,系统分配内存来存储值。
定义值类型的标识符还有bool, byte, decimal, double, long, sbyte, short, uint,ulong,ushort。
我们想定义一个 int,char类型的变量并给它们赋值:
int a=5; //定义一个int型变量并初始化;
char c='2'; //定义一个char型变量并初始化;
引用类型
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:object、dynamic 和 string。
对象(Object)类型 是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。Object 是 System.Object 类的别名。所以对象(Object)类型可以被分配任何其他类型的值。但是,在分配值之前,需要先进行类型转换。
当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。
object obj;
obj = 100; // 这是装箱
动态(Dynamic)类型可以存储任何类型的值,其定义方式为:dynamic = value; 例如下面代码:
dynamic d = 20;
字符串(String)类型 允许您给变量分配任何字符串值。字符串(string)类型是 System.String 类的别名。它是从对象(Object)类型派生的。字符串(String)类型的值可以通过两种形式进行分配:引号和 @引号。
C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符()当作普通字符对待,比如:
string str = @"C:Windows";
等价于:
string str = "C:\Windows";
@字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。
string str = @"";
关于string我们后面还会具体介绍。
常量
常量就是其值固定不变的量。从数据类型角度看,常量的类型可以是任何一种值类型或引用类型。
一个常量的声明就是声明程序中要用到的常量的名称和它的值。和变量一样,我们可以同时声明一个或多个给定类型的常量,常量的声明格式如下。
constant-modifier const type constant-declarators;
其中,常量修饰符 constant-modifier 可以是这些:new、public、protected、internal、private。const是关键字,type可以是byte、short、int、uint、ulong、long、char …… 以及枚举类型或引用类型。
public const int MaxValue = 10
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。
一个浮点常量是由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。
字符常量是括在单引号里,例如,'x',且可存储在一个简单的字符类型变量中。一个字符常量可以是一个普通字符(例如 'x')、一个转义序列(例如 't')或者一个通用字符(例如 'u02C0')。
字符串常量是括在双引号 "" 里,或者是括在 @"" 里。
212 /* 合法 */
0xFeeL /* 合法 */
85 /* 十进制 */
0213 /* 八进制 */
0x4b /* 十六进制 */
30 /* int */
30u /* 无符号 int */
30l /* long */
30ul /* 无符号 long */
3.14159 /* 合法 */
314159E-5L /* 合法 */
\ 字符
' ' 字符
" " 字符
? ? 字符
"hello" hello字符串
变量
一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。 如何定义变量呢?定义格式如下
data_type variable_list;
在这里,data_type 必须是一个有效的 C# 数据类型,可以是 char、int、float、double 或其他用户自定义的数据类型。variable_list 可以由一个或多个用逗号分隔的标识符名称组成。
变量可以在声明时被初始化(指定一个初始值)。初始化由一个等号后跟一个常量表达式组成。
int d = 3, f = 5; /* 定义初始化 d 和 f */
byte z = 22; /* 定义初始化 z */
double pi = 3.14159; /* 定义声明 pi 的近似值 */
char x = 'x'; /* 定义变量 x 的值为 'x' */
类型转换
在 C# 中,类型转换有两种形式:
隐式类型转换 ——这些转换是 C# 默认的以安全方式进行的转换。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
显式类型转换 ——这些转换是通过用户使用预定义的函数显式完成的。显式转换需要强制转换运算符。
强制转换的语法为: (data_type)variable; 其中括号不可以省略,data_type为要转换的类型说明符,variable为要转换的变量。
double d = 5673.74;
int i;
i = (int)d; // 强制转换 double 为 int
执行结果为5673。