Inheritance and Polymorphism

public class Listbox: Control

上面的statement表示Listbox类继承自Control类.

C#中没有私有或者保护继承,而且C#中类不能从多个基类继承, 但是可以重多个接口继承(还不知道啥意思,等后面看)

 

怎么实现方法(method)的多态呢?

 

要创建支持多态性的方法,只需在基类中将其标记为virtual. 如: public virtual void DrawWindow(), 这样,每个派生类都可以自由实现自己版本的DrawWindow()方法了, 为实现此功能,在派生类方法定义中用关键字 override 来覆盖基类的虚方法,然后添加自己的代码..

 

 

派生类中调用基类的构造函数的写法:

string contents) :
            base(top, left) // call base constructor
        {

            listBoxContents = contents;
        }

 

要注意的是在派生类中重新定义的函数必须用关键字override标记,这点与C++是不一样的.

 

关于派生类的构造函数: 如果基类有可以访问的默认构造函数,派生类的构造方法就不需要显式调用基类构造方法,默认构造方法将被隐式调用.

但是,如果基类没有默认构造方法,也就是说基类中自己定义了构造方法,那么派生类中的构造方法必须使用base关键字显式调用基类的构造方法.

 

基类和派生类中出现同名的虚函数的情况:

如果直接不加任何限制,编译时编译器会提示,派生类的虚函数覆盖了基类的虚函数,如果确实这是你的真实意图,在派生类的函数前加上override 关键字:

public class ListBox:Control

{

    public override void sort(){。。。}

 

}

 

如果不想重载虚函数,则应该加上new关键字:

public class ListBox:Control

{

    public new virtual void sort(){。。。}

 

}

 

抽象类与密封类

如果类的一个或者多个方法是抽象的,那么这个类就是抽象类。

 

抽象方法要求所有派生方法必须实现这个方法,但是它不能强制要求派生类的派生类实现该方法。

抽象类并不仅仅是一种实现技巧,更是一种抽象的思想,抽象类中描述了实现这种抽象的所有类的共有的方法。

 

抽象类不能有实例,也就是他必须被继承使用,而密封类则刚好与之相反,密封类完全不允许被派生。关键字sealed用于标示密封类。

 

所有类的根类:Object类

所有C#类,无论是什么类型,都可以看成是从Systm.Object继承而来,甚至值类型也包括其中。

 

object类的一些方法:

方法作用
Equals()比较两个对象是否相等
GetHashCode()为对象提供用于集合中的散列码
GetType()提供对类型对象的访问
ToString()

提供对象的字符串表示

Finalize()清楚无用内存资源,用析构函数实现
MemberwiseClone()

创建对象的副本,自定义类型不应实现

ReferenceEquals()比较两个函数是否指向相同实例

 

 

嵌套类

类的成员是另外的类是允许的,被包含的内部类称为嵌套类(nested class),而包含嵌套类的类则称为外层类(outer class)。

嵌套类可以访问外层类的所有成员,包括私有成员。

 

要声明嵌套类的实例时,必须指定外层类的类型名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值