数组 都继承于System.Array
int[] numbers = new int[5]; string[,] names = new string[5,4]; byte[][] scores = new byte[5][]; scores[1] = new byte[10];//数组的数组 //[,]是规则数组,每行的列元素都是相同的,变现为矩阵 //[][]是不规则矩阵,每行的列数都是可以不一样的
初始化
int[] numbers2 = new int[]{1,2,3,4,5};
int numbers3 = {1,2,3,4,5};
string[,] names = {{"g","k"},{"h","j"}};
for(int i=0;i<100;i++){}
//初始化,条件,步长
//break 跳出循环
//continue 跳出本次循环,进行下一次List<int> listInt=new List<int>(){1,2,3};
foreach(var intInList in listInt){}while(条件){} //可能一次都不执行
do{} while(条件) //最少执行一次
#region 名字 //代码块 #endregion
方便管理代码
if(条件){} //条件为true时执行代码块
else{} //条件为false时执行
// !反 &&且 ||或者
可为空值类型
int? iNullable = 100; //等同于 System.Nullable<int> iNullable2 = 100;
双??操作符
int ii = iNullable??500;
如果iNullable为空,则赋值为500,不为空赋值为iNullable
装箱:将值类型变为引用类型
引用放在栈上,值放在堆上
int i=100; object iBoxed = i;
拆箱:将引用类型转换为值类型
int UnBoxing=(int)iBoxed;
C#是强类型,编译的时候就会进行类型检查。
隐式转换类型
int i=10; long c=i;
class c1{}
class c2:c1{}
c1 c11 = new c2();小的数据范围到大的数据范围
显示转换(大范围到小范围,会丢失)
double d=10.05; int i=(int)d; c11 is c1;//is判断类型 c11 as c2;//(不能显示转化是不会报错,赋值为null),as转换类型
转换string到int
Covert.ToInt32("100");
Int32.Parse("100");
bool succeed = Int32.Parse("100",out i);
interface ISuper{
int GetAge();
}
class HePi : ISuper{
public int GetAge(){
return 18;
}
}接口里面的都是抽象方法,继承接口后,需要实现接口里面的所有方法
abstract class Man{
puclic abstract int GetAge();
}
class HaPi : Man{
public int GetAge(){
return 18;
}
}继承这个抽象类,必须实现里面的抽象方法,抽象类里面可以有不抽象的方法,像平常类那样
class People{
public People(..参数){//构造函数}
private int age;
public int getAge(){return age;}
}静态方法
public static int GeyAge(){}
类名::GetAge()属性
public int Age{get;set;} //get和set也是方法可以自定义
public string Name{get{return...}};