枚举是被命名的整型常数的集合;枚举类型的变量只有赋值后才能使用;不同枚举中的枚举值可以重名;可以自定义枚举值。
enum Playstates {
跑, 跳,下滑,左转,右转
}枚举值的使用:Playstates.跑;
结构体相当于一个复合型的容器,其是由一系列不同类型的数据构成的集合;结构体中的成员不能在定义中赋初始值。
struct Person{
//public 类型 变量名
public string name;
public int age;
}//在main函数之前定义结构体的使用:Person p;//先声明一个person类型变量
p.name="老王";
访问修饰符public 公共,访问不受限制
private 私有,只能在当前的类或者结构体中使用
protected 受保护的 只有在其所在类或者子类中可以访问,不能在结构体中使用
internal 内部的,同一程序集中的任何代码都可以访问该类型或成员,但在其他程序集中不可以访问
权限:1没有嵌套在其他类或者结构中的类型,只能是public或者internal,默认是internal
2 类成员可以是任意的访问权限,不加修饰符默认是private
类与对象类是抽象的类型,对象是具体的实现
访问修饰符 class 类名{
类成员...
}
public class Person{public string name;public int age;}
Person p=new Person();//使用new关键字声明一个新的对象,对象也叫做类的实例。
字段我们用字段描述类的特征 ,在类中可以直接给字段设置初始值;
访问字段:p.name="老王";
方法我们用方法描述类的行为,方法就是在类中定义的多条语句的代码块
语法 :访问修饰符 返回值类型 方法名(参数列表){语句;..;return 返回值;}
调用方法:对象.方法名(参数);
对于私有成员变量既不能获取也不能更改,为了获得,可以设置get,set方法
public class Car { private string name="老王";//私有变量不能被外界访问 public string GetName() { return name; } public void SetName(string newname) { name = newname; } }
属性属性自动帮我们给字段添加set get方法,属性本质上也是set get方法,只是形式不同
语法: 访问修饰符 属性类型 属性名 {set{};get{}}
public class Car { private string name="老王"; public string Name//属性 { //get访问器 get { return name; } //set访问器 set { //value关键字只能在属性的set方法中有意义,表示外界客观传递过来的值 name = value; } } }
使用:Car C=new Car();
C.Name="hello";//更改名称,注意使用属性名Name
属性的访问权限:仅当属性同时具有Set与Get方法时,才能使用访问器修饰符,并且只能够对其中一个访问器使用修饰符
值类型和引用类型值类型在栈中分配空间,由系统自动分配
引用类型在堆中分配空间,,由我们用new分配
string是特殊的引用类型
方法参数形参:定义方法时,在参数列表中定义的参数叫做形参
实参:调用方法时,在参数列表中传递的参数叫做实参
值类型在方法内对形参做改变,不会影响到外界的实参,而引用类型可以在方法内对外界值做改变。
值类型的参数想要达到引用类型参数的效果,需要用到引用修饰符ref
public void Swap(ref int x, ref int y){
int temp=x;
x=y;
y=temp;
}
int i=5;
int j=12;
Swap(ref int i,ref int j);//可实现两数互换值。
输出参数:如果想让一个方法返回多个值,在参数前加out修饰符
public void Sum(int i,int j,out int sum){
sum=0;//必须先在方法中赋初始值
sum=i+j;
}
int r;
Sum(5,13,out r);
可变参数:如果在定义方法时不能确定有多少个参数,可以使用可变参数params
public int Sum(params int[] nums){
int s=0;
foreach(int n in nums){ s+=n;}
return s;
}
int m= Sum(1,2,3,4,5);
字符串string字符串是引用类型,因为它本质上是一个char类型的数组。因此可以使用下标索引字符串中的字符元素
方法:Contains();//判断是否包含子字符串
IndexOf();//获取指定字符或者字符串中的下标
Remove();//删除子字符串
Replace();//替换子字符串
Split();//分割子串
Substring();//获取字串