您的位置:程序门 -> .net技术 -> c#



抽象类和接口使用时的选择


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


抽象类和接口使用时的选择[已结贴,结贴人:chengjun01249]
发表于:2007-08-31 14:04:04 楼主
我知道抽象类和接口语法和怎么实现他们,但我想更清楚的知道在系统应用里何时做出真确的选择,就是在什么样的情况下选择抽象类或接口,最好有实际的例子说明
发表于:2007-08-31 14:17:501楼 得分:50
先了解清楚2个的区别,就知道在哪里要用什么了:
个人比较觉的比较重要的2点是:
1、看的你继承类是否需要多继承,如果要就只能使用接口
2、看你在定义的方法是否需要有实现的代码,如果要,就使用抽象类

http://www.cnblogs.com/anytao/archive/2007/04/12/must_net_02.html
发表于:2007-08-31 14:22:292楼 得分:50
interface是一种契约,   abstract   class是事物本质的抽象概括

由以上两点,   什么时候用interface什么时候用abstract   class有看你如何理解你的设计对象,   例如,   某一天你可能会要设计一个door的类,   它有open和close两个功能,   于是

public   interface   door
{
void   open();//只能定义其标签,不可以带函数的实现
void   close();
}

public   abstract   class   door
{
void   open(){};//可以带函数的实现
void   close(){};
}

就目前来说,   你用interface还是用abstract   class基本上没什么区别,   两者都用来描述door的行为,   只不过用interface是在强调door额外的有open和close这两个功能,   而用abstract   class则是在强调door自带有open和close的能力,   因为他还可以有其它的东西。

走远一点,   假如又有一天,   你要写一个alarmdoor的类,   这个时候...

public   interface   alarmdoor
{
void   open();
void   close();
void   alarm();
}

public   abstract   class   alarmdoor
{
void   open(){};
void   close(){};
void   alarm(){};
}

现在,   你应该想清楚你究竟是想设计一个报警器还是想设计一扇门,   如果选择interface,   那你是在想设计一个报警器,   如果选择abstract   class,   那你是在想设计一扇门,   说到现在,   是否有点眉目了?

c#里面不允许多个父类,   但却允许多个接口,   接口无非是让某个类拥有某种行为,   而抽象类却是在让某个类拥有某种本质,   因此,   我们设计的类,   应该用一个抽象类把它的所有本质都抽象出来,   而它的一些行为(或者说是契约)则通过interface来实现,   这也能说明为什么c#会不允许多层父类却允许多层接口
发表于:2007-08-31 14:24:093楼 得分:0
以下是我学习抽象类时做的笔记希望对你有帮助:)
abstract与interface的区别:

        abstract可以有自己的数据成员也可以有非   abstract的成员方法!interface方式的实现中,demo只能够有静态的不能被修改的数据成员(也就是必须是static   final   的,不过在interface中一般不定义数据成员)!从某种意义上说,interface是一种特殊形式的   abstract   class。
abstract   class   在c#中表示的是一种继承关系,一个类只能使用一次继承关系!   但是,一个类却可以实现多个interface。
        在abstract   class的定义中,我们可以赋予方法的默认行为(构造器)。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托。如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了   "one   rule,one   place "   原则,造成代码重复,同样不利于以后的维护。
        抽象类中的变量默认是   friendly   型,其值可以在子类中重新定义,也可以重新赋值。
abstract   class和interface所反映出的设计理念不同。其实abstract   class表示的是 "is-a "关系,interface表示的是 "like-a "关系。
发表于:2007-08-31 14:27:364楼 得分:0
抽象类用的好少啊,我也不知道用抽象类有什么用,接口倒是经常得用的.

为什么要用接口?下面是我自己的一些想法,希望大家别见笑,我也是新手.

1.定义一个接口之后,一定会有个类来继承这个接口,然后依依实现接口里面的方法或是属性.如果不全部实现,就会报错(这个楼主应该知道的).(举一个笑话例子:一天有个男的要去相亲,然后亲家有n多个女儿,有貌美如花的,有侏罗纪时代的....男的就看中其中一个长的漂亮的了,于是就只想取那个漂亮的,其他的就不要了,结果,亲家她妈说:不行,要就全部取走,否则就要你后悔一辈子,呵呵,开个玩笑)

2.接口只是提供给用户使用的,对于该功能的具体实现就用不着用户去了解了,就像你家的电视机,就只管用遥控器去看就行了,你管它怎么放出图象的怎么变换频道的.

3.接口是死的,接口的实现是活的,实现的方法可能多种多样,比如举个形象点的例子.有一个接口,里面有个方法是用来发电的,有一家风力发电公司提供了一个实现方法,用风力进行发电,另外有一家公司也提供了一个实现方法,是用火力发电的.发出来的都是电,呵呵...我们只用电,管你怎么发出来的电,就算你牛x可以把天上的闪电减压然后利用,我们都不管,我们只用电!
发表于:2007-08-31 14:32:335楼 得分:0
我也补充一点:

使不同的类型有共同的特性的时候使用接口,因为它支持多继承
        比如想使textbox,label,combobox等都有共同特性的时候,这个特性可以继承于同一个
        接口

只想从一个类型继承出不同的行为的子类的时候使用抽象类,必竟可以在基类里有代码实现。
        比如对一个画图的程序来说,可以定义一个基类drawbase,基类里可以有代码实现,可
        以从其派生出lineobj,rectangleobj等对象,且这些对象都要求有自己特有的特性的时候
        使用抽象类。
发表于:2007-08-31 15:41:066楼 得分:0
使用接口类时,继承了接口类的类必须实现接口中定义的抽象方法

使用抽象类时,继承了抽象类的派生类可以去实现抽象类中的方法
发表于:2007-08-31 15:42:317楼 得分:0
楼上的兄弟们总结的不错!
发表于:2007-08-31 15:53:178楼 得分:0
使用接口类时,继承了接口类的类必须实现接口中定义的方法,是强制的

使用抽象类时,继承了抽象类的派生类可以去实现抽象类中的方法,是可以选择的
发表于:2007-08-31 16:21:569楼 得分:0
symbol441(≮西门潇洒≯)  

这个说的好。我喜欢,简单易懂呀、
发表于:2007-08-31 17:10:3510楼 得分:0
讨论...
发表于:2007-09-03 10:26:2611楼 得分:0
能不能再给点实际项目的例子


快速检索

最新资讯
热门点击