using System;
Console.WriteLine("Hello world");
namespace YourNamespace
{
//1.声明变量
//1.1 datatype identifier;可以使用=赋值
int i;
i = 10;
//1.2 可以在一行代码中同时声明变量,并初始化值
int a = 10;
//1.3 如果在一条语句中声明并初始化多个变量,那么所有变量都具有相同的数据类型
int b = 10, c = 20;
//1.4 声明不同的类型的变量,需要使用单独的语句,且在一条多变量的声明中,不能指定不同的数据类型
int d = 10;
bool e = false;
float f = 3.1415;
//2.初始化变量 简单说编译器需要用某个初始值来对变量进行初始化,之后才能在操作中引用变量。
//两种方法
//2.1 变量是类或结构中的字段,若没有显式初始化,则默认值就是0
//2.2 方法的局部变量必须在代码中显式初始化才能在语句中使用该变量的值。
static interface ForEx1()//main
{
int j;
Console.writeLine(j); //会不会报错???
return 0;
}
//3.类型推断
//使用var关键字代替实际的类型,编译器可以根据变量的初始化值来推断出该变量的类型
var h = 10;//等于 int h = 10;只要在作用域内,就是int 类型
//举个例子 一个程序只能有一个主入口Main
static void ForEx2()
{
var name = 'boys';
var age = 26;
var isRabbit = true;
Type nameType = name.GetType();
Type ageType = age.GetType();
Type isRabbitType = ageType.GetType();
Console.WriteLine($"name is of type {nameType}");
Console.WriteLine($"age is of type {ageType}");
Console.WriteLine($"isRabbit is of type {isRabbitType}");
}
//运行得出结果。
//在使用var时,要注意:变量必须初始化,否则编译器没有推断变量类型的依据
//初始化器不能为空,必须要把初始化器放在表达式中。
//也不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象
//4.变量的作用域
//上面说到作用域,就是可以访问该变量的代码区域。
//只要类的局部变量在某个作用域内,其字段也在该作用域内
//局部变量存在于表示声明该变量的块语句或方法结束的右花括号之前的作用域内
//4.1 在大型程序中常在不同部分为不同的变量使用相同的变量名。只要变量的作用域是程序的不同部分,就不会有问题
//同名的变量不能在同一作用域内声明两次
int x = 10;
int x = 20;
//再来一个
static int ForEx3()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
for (int i = 9; i >= 0; i--)
{
Console.WriteLine(i);
}
return 0;
}
//使用两个FOR循环,重要的是在同一个方法内声明两次。why?因为每个变量i都对应各自的作用域。
//看这个 这里的int 为返回类型 void为空
static int ForEx4()
{
int j = 20;
for(int i =0; i < 10; i++)
{
int j = 30;
Console.WriteLine(j);
}
return 0;
}
//这样编译的话就会报错,j在for循环之前就定义了,在执行for时还在作用域内,直到方法结束才超出作用域。所以编译无法区分两个变量。有个就近原则
//4.2 字段和局部变量的作用域冲突
//C#在变量之间有一个基本的区分,会把类型级别声明的变量看称字段,而在方法中声明的变量看称局部变量
//举个例子
class ForEx5
{
static int x = 10;
static void Main()
{
int x = 30;
Console.WriteLine(x);
return;
}
}
//一个在类级别上定义的,在程序结束前是不会超出作用域的
//另一个则是在Main()中定义的,其中J隐藏了同名的类级变量,所以在这段代码中会显示30。
//如果引用类级别变量可以使用object.filename,访问静态方法中一个静态字段,不能使用类的实例。只能使用类本身的名称
static void Main()
{
int j = 30;
Console.WriteLine(j);
Console.WriteLine(ForEx5.x);
}
//5.常量
//常量就是在使用过程中不会发生变化的变量,使用const声明变量
const int k = 10;
//其特点就是必须在声明时就初始化,指定值后就不会发生变化
//常量便于多处引用时统一修改,
}