前、介绍
命名空间是把相关类组合在一起的方式;namespace关键字声明了应与类相关的名称空间;编译器在using语句指定的名称空间中查找没有在当前命名空间中定义但在代码中引用的类。
所有的C#代码都必须包含在一个类中。
方法定义方式:修饰符 返回类型 方法名 (参数) { }。
必须有一个Main()方法作为程序入口点;该方法要么没有返回值(void),要么返回一个整数(int)。
一、变量和常量
1.声明变量
声明单独类型多个变量: int x = 10, y = 20;
2.变量初始化
- 变量是类或结构中的字段,如果没有显示初始化,创建这些变量时,其值默认是0;
- 方法的局部变量必须在代码中显示初始化,之后才能在语句中使用它们的值。此时,初始化不是在声明该变量时进行的。但编译器会通过方法检查所有可能的路径,如果检测到局部变量在初始化之前就使用了它的值,就会产生错误。
类型推断var:
- 变量必须初始化
- 初始化器不能为空
- 初始化器唏嘘放在表达式中
- 不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象
var name = "Bugs Bunny";
var age = 25;
var isRabbit = true;
Type nameType = name.GetType();
Type ageType = age.GetType();
Type isRabbitType = isRabbit.GetType();
Console.WriteLine("name is type " + nameType.ToString());
Console.WriteLine("age is type " + ageType.ToString());
Console.WriteLine("isRabbit is type " + isRabbitType.ToString());
输出结果为:
name is type System.String age is type System.Int32 isRabbit is type System.Boolean 请按任意键继续. . .
3.变量作用域
- 类在某作用域内,其成员变量也在该作用域内;
- 局部变量 存在于表示该变量的块语句或方法结束的封闭花括号之前的作用域内;
- 在for、while或类似语句中的局部变量作用于该循环体中。
类级别变量和方法内同名变量不冲突。
class Program
{
//引用类级别变量 object.fieldname
static int i = 20;
public static void Main()
{
int i = 30;
Console.WriteLine(i);
Console.WriteLine(Program.i);
}
}
输出结果为:
30 20 请按任意键继续. . .
4.常量
使用const
关键字声明。
const int a = 100
- 声明时必须初始化
- 常量的值必须能在编译时用于计算,不能用从一个变量中提取的值来初始化常量
- 常量总是静态的
二、预定义数据类型
1.值类型和引用类型
值类型:
直接存储其值
存储在堆栈中
引用类型:
存储对值的引用
存储在托管堆上
把基本类型(如int和bool)规定为值类型;而把包含许多字段的较大类型(通常在有类的情况下)规定为引用类型。如果要把自己的类型定义为值类型,就应把它声明为一个结构。
C#有15个预定义类型,13个值类型,2个(string、object)引用类型。
预定义的值类型
名称 | 说明 |
---|---|
整形 | |
sbyte | 8位有符号的整数 |
short | 16位有符号的整数 |
int | 32位有符号的整数 |
long | 64位有符号的整数 |
byte | 8位无符号的整数 |
ushhort | 16位无符号的整数 |
uint | 32位无符号的整数 |
ulong | 64位无符号的整数 |
浮点类型 | |
float | 32位单精度浮点数(7位) |
double | 64位双精度浮点数(15/16位) |
decimal类型 | |
decimal | 128位高精度十进制数表示法(28位) |
bool类型 | |
bool | 表示true或false |
字符类型 | |
char | 表示一个16位的(Unicode)字符 |
- byte类型在默认状态下是无符号的,其中有符号的版本有一个特殊的名称sbyte。
- 所有整数类型的变量都能赋予十进制或十六进制,十六进制需要0x前缀:
long x = 0x12ab;
- 如果对一个整数是int、uint、long或ulong没有任何显式的声明,则该变量默认为int类型。为了把键入的值指定为其它整数类型,可以使用U/L字符:
uint ui = 1234U; long l = 1234L; ulong ul = 1234UL;
- 如果在代码中没有对某个非整数值硬编码,则编译器一般假定该变量是double。如果要指定该值为float,可以在其后加上字符F:
float f = 12.3F;
- 要把数字指定为decimal类型,可以在数字后加上字符M:
decimal d = 12.30M;
- char类型的字面量使用单引号括起来的。除了吧char表示为字符字面量之外,还可以用4位十六进制的Unicode(例如 'u0041'),带数据类型转换的整数值(例如 (char)65),或十六进制数('x0041')表示它们。它们还可以用转义序列表示,如下表所示:
转义序列 | 字符 |
---|---|
' | 单引号 |
'' | 双引号 |
反斜杠 | |