1.怎么声明一个类?
先由一个完整的类定义(但并不是真实的和必须的)来看类的组成元素:
class
MyClass
{
//字段,用于存储所需要的数据,会自动初始化为0的等价表示
private int a;
public static string d; //只能通过类而不是类实例来引用
//属性,用于为私有字段的读写构造一个安全的环境
public int A
{
get //get访问器,这块可以简写为:get;(没有其他逻辑时)
{
return a;
}
set //set访问器,value为隐式参数,这块可以简写成:set;(没有其他逻辑时)
{
a = value;
}
}
//索引器,用于封装类的内部集合或数组,名字只能是this
private string [ ] x = new string [ 5 ];
public string this [ int index]
{
get
{
return x[index];
}
set
{
x[index] = value;
}
}
//构造函数
public MyClass()
{
a = 1 ;
}
//带参数的构造函数
public MyClass( int _param)
{
A = _param;
}
//析构函数
~ MyClass()
{
//Do Something
}
}
{
//字段,用于存储所需要的数据,会自动初始化为0的等价表示
private int a;
public static string d; //只能通过类而不是类实例来引用
//属性,用于为私有字段的读写构造一个安全的环境
public int A
{
get //get访问器,这块可以简写为:get;(没有其他逻辑时)
{
return a;
}
set //set访问器,value为隐式参数,这块可以简写成:set;(没有其他逻辑时)
{
a = value;
}
}
//索引器,用于封装类的内部集合或数组,名字只能是this
private string [ ] x = new string [ 5 ];
public string this [ int index]
{
get
{
return x[index];
}
set
{
x[index] = value;
}
}
//构造函数
public MyClass()
{
a = 1 ;
}
//带参数的构造函数
public MyClass( int _param)
{
A = _param;
}
//析构函数
~ MyClass()
{
//Do Something
}
}
2.实例化一个类?
MyClass mc
=
new
MyClass();
//a = 0;
MyClass mc = new MyClass( 5 ); //a = 5;
MyClass mc = new MyClass( 5 ); //a = 5;
3.怎样继承?
class
MySubClass
:
MyClass
{
//若想重新定义与基类相同的成员,可以使用new来隐藏基类成员
//若想访问基类的成员,可以使用base.语法来引用
public int y;
//指定基类构造函数
public MySubClass( int _param1, int _param2) : base (_param1)
{
y = _param2;
}
}
{
//若想重新定义与基类相同的成员,可以使用new来隐藏基类成员
//若想访问基类的成员,可以使用base.语法来引用
public int y;
//指定基类构造函数
public MySubClass( int _param1, int _param2) : base (_param1)
{
y = _param2;
}
}
(1)使用sealed关键字定义的类不能被继承。
(2)暂时不看分部类,静态类,包括只能在静态类中才能使用的扩展方法。
(3)派生类型的向上转型会使得派生类中的成员变得不可见。
4.实现多态
(1)编译时多态:通过静态绑定实现,要求在同一个类中,方法名相同,方法签名不同,就是重载方法。
(2)运行时多态:通过覆写虚方法实现的,虚方法使用关键字virtual标识。
class
Person
{
public virtual void Speak()
{
//定义虚函数,抽象方法不能有函数体,抽象类即使用abstract标识的类
}
}
class Male : Person
{
public override void Speak()
{
//实现覆写,如果不想让这个类的派生类继续覆写该虚函数,就使用sealed关键字密封方法
}
}
{
public virtual void Speak()
{
//定义虚函数,抽象方法不能有函数体,抽象类即使用abstract标识的类
}
}
class Male : Person
{
public override void Speak()
{
//实现覆写,如果不想让这个类的派生类继续覆写该虚函数,就使用sealed关键字密封方法
}
}