类
1、类(class):字段(field)->变量,方法(method)->函数
class Persom{
publie int a ;
public void GetInfo(){
}
}
2、构造方法(constructor):完成对象的初始化
1)方法名与类名相同 2)没有返回类型,不能写void
pubilc Person(int b){
a=b;
}
系统默认产生构造方法,默认为public Person( ) { };
3、析构方法:C#自动进行对象的释放
4、方法重载(overloading):方法的签名不同(方法名及参数个数与类型,参数名不算)
5、this:对象本身
1)访问本对象字段与方法
2)区分字段与局部变量
public Person(int a)
{
this.a=a;
}
3)构造方法调用另一个构造方法
public Person():this(7)
{
...
}
属性、索引
6、属性(property):对字段的一种访问(set、get)
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name=value;
}
}
//C#3以上版本可简写为
public string Name{get;set;}
对属性的访问:
Person p=nwe Person;
p.a=7;
Console.WriteLine(p.a);
//编译器产生方法
void set_Name(int value);
string get_Name();
属性实际上是方法,属性的优点:
1)可只读或只写:只有get或set
2)可有效性检查:if
3)可是计算得到的数据
public string Info{
get{return "Age:"+a;}
}
4)可定义抽象属性
7、索引(indexer):对内容取下标的访问
修饰符 类型名 this[参数列表]
{
set
{
}
get
{
}
}
使用索引:对象名[参数]
编译器自动产生两个方法供使用
T get_Item(P);
void set_Item(P,T value);
属性、索引的比较
属性 | 索引 |
通过名称标识 | 通过参数列表进行标识 |
通过简单名称访问 | 通过[ ]运算符来访问 |
可用static修饰 | 不能用static修饰 |
get访问器没有参数 | get访问器具有与索引相同的参数列表 |
set访问器包含隐式value参数 | 除了value参数外,set访问器还有与索引相同的参数列表 |
类的继承
8、继承(inheritance):子类subclass、父类baseclass
C#中采用单继承,所有的类都是通过直接或间接继承
子类自动从父类继承:字段、方法、属性、索引器等成员作为自己的成员
除了继承父类的成员,还可以添加新的成员,隐藏或修改父类的成员
9、方法的继承
与父类同名的方法:
1)同名不同参数->重载(overloading)
2)同名同参数->new
3)同名同参,父类用absteact或virtual,子类用override修饰->虚方法的覆盖(overriding)
Person p1=new Person();
Person p2=new Student();
Student s1=new Student();
Student s2=new Student();
p1=s1; //可以,Person类型可以引用Student对象
s2=p1; //不行,编译错误
s2=(Student)p1; //编译通过,运行时类型不能转换
s2=(Student)p2; //正确,p2引用为Student对象
10、as运算符:若不能转换,值为null
差别(与强制类型转换):1)as只针对引用型变量 2)若不能转换不会异常,结果为null
Student s3=p1 as Student;
Student s4=p2 as Student;
11、is运算符:判断一个对象是不是某个类(及其子类)的实例