1.const及readonly
const是 常量,只能用于修饰基本类型和string类型,可以修饰类的字段和局部变量(一般用于修饰局部变量,字段用readonly);readonly只能修饰字段,readonly修饰的变量只能赋一次值,在构造方法中赋值或在申明中赋值。
2.定义枚举类型
enum MyColor{
Red,Green,Blue}
使用枚举类型
MyColor c = MyColor.Red;
String name = c.ToString();//转化为字符串
c = (MyColor)Enum.Parse(typeof(MyColor),“Red”);//字符串转化为枚举
(3)结构struct
定义形式与类相同,可以继承接口,但不能被继承,结构没有构造函数,字段定义是不能赋初值。
(4)c#抛异常
throw new ArgumentException(“xxx”);//xxx为抛出异常的信息
(5)Override与new关键词
子类与父类签名相同的方法/属性/索引,可添加两种关键词
New关键词
新建子类成员,隐藏父类成员
是与父类完全无关的新成员(拒绝继承父类成员)
Override关键词
重写父类的虚方法、虚属性、虚索引(父类预定义的扩展点)
可以供父类实现多态
(6)使用base
使用base 访问父类的字段和方法
void sayHello(){
base.sayHello();
Console.WriteLine( "My school is " + school );
}
使用父类的构造方法
Student(string name, int age, string school ) : base( name, age ){
this.school = school;
}
PS:可以将base理解为父类的别名。
(7)方法的重载(overloading)
要求:各个方法的签名不能重复
方法签名:方法名及参数个数及类型构成(参数名和返回类型不算)
public void SayHello(){ // 签名 SayHello();
Console.WriteLine("Hello! My name is " + name );
}
public void SayHello( Person another ){ //签名 SayHello(Person)
Console.WriteLine(“Hello,” + another.name
+ "! My name is " + name );
}
当重载了多个函数时,函数调用找参数精确匹配的方法,没有再找参数是父类的方法
例如重载了两个函数:
调用函数:
虽然object类型是整型数组的父类可以赋给object,但参数是整型数组的函数更符合,所以调用第一个。
下面的例子调用第二个函数:
//string类是object类的子类。
(9)方法的首字母建议大写
(10)一般不在构造函数里抛异常
(11)索引器
索引器可以看作是带参数的属性。
索引的参数可以为整数、字符串等任意数据类型
参数数目可以允许一到多个。
常来对内部的数组/集合等字段的元素进行读写。
(12)一个类中可以重载多个构造函数,可以在一个构造函数中调用该类中的另一个构造函数用this.类型([参数列表])
public class Person
{
public Person(string name, int age) : this(name, age, 0, string.Empty) //重载构造函数、和:base不同,:this在此处是调用本类之中的其他构造函数
{
}
public Person(string name,string email):this(name,0,0,email)//重载构造函数、和:base不同,:this在此处是调用本类之中的其他构造函数
{
}
public Person(string name, int age, int height, string email)//重载构造函数//this调用的就是本条构造函数
{
this.Name = name;
this.Age = age;
this.Heigth = height;
this.Email = email;
}
这样做的意义是简化代码,重载了多个构造函数,只需要具体写其中一个的函数体,其他构造函数调用一些的,缺少的参数赋值为0或null或“”。