核心C#
变量
- 初始化
int i=10;
int类型,开辟4个字节内存空间,根据变量名找到此块内存的地址,里面存数字10。
-
作用域
每一个{ }代码块为一个作用域,一般花括号里的只能在内部使用,不同的花括号内用相同的变量没问题,但最好不要,代码不容易理解。很多循环时变量变更,必须在循环外定义,在循环内赋值就好了。 -
常量
用关键字const声明
int const level=2;
一般项目内不得不写具体值,需要用常量替代,不能直接写成硬代码。
数据类型
-
值类型和引用类型区别
概念上:值类型直接存储值,引用类型存储值得引用(内存地址)
存储位置:值类型存在堆栈(stack)中,引用类型存在托管堆(managed heap)中。关于堆栈和托管堆的区别,请戳别家大神的深入理解 c#堆栈和托管堆
对于引用类型,赋值后原来的值也会跟着改变的原理如下:
定义一个引用类型的类Vector,其包含一个int类型的成员变量value
object class Vector
{
private int age;
public int Age{get;set;}
}
class Test
{
static void Main()
{
Vector x,y;
x=new Vector();
x.Age=18;
y=x;
WriteLine(y.Age);
y.Age=25;
WriteLine(x.Age);
}
}
输出分别为18,25。因为同一个引用地址Vector ,只new了一次,所以会相互修改。
- 基本数据类型
基本C#的类型和.NET类型是相对应的,写的时候好像是用哪个都行,因为都会引用system命名空间。
程序流控制
-
条件控制
if和switch -
循环
for,一般循环次数固定;while,循环到条件不满足;do…while,至少执行一次;foreach,遍历,迭代集合中的每一项,不能改变集合项的值。 -
跳转语句
goto, 不怎么用;break, switch中跳出或者跳出循环执行接下来的语句;continue,跳过此次循环,执行下次循环;return,跳出循环,将控制权交给方法的调用者。
枚举
定义的一系列整数值,但是可以起便于理解的变量名,继承system.enum类。
class test
{
public enum TimeOfDay
{
Morning=0,
Afternoon=1,
Evening=2
}
static void Main()
{
WriteLine(TimeOfDay.Morning);//0
WriteGreeting(TimeOfDay.Morning);
}
private void WriteGreeting(TimeOfDay timeOfDay)
{
switch(timeOfDay)
case timeOfDay.Morning:
WriteLine("Good Moring");
break;
case timeOfDay.Afternoon:
WriteLine("Good Afternoon");
break;
case timeOfDay.Evening:
WriteLine("Good Evening");
break;
default:
break;
}
}
既可以检索int值也能检索出字符串,需要实例化。
TimeOfDay time= TimeOfDay.Evening;
WriteLine(time.ToString());// Evening