1.>抽象类与接口在设计时各有什么好处?
接口不能执行任何的方法,而抽象类可以。
类可以执行许多接口,但只有一个父类。 这个也有人说用接口可以实现多重继承。
接口不是类分级结构的一部分。而没有联系的类可以执行相同的接口。
具体说说:
接口是对象属性和方法的描述(但不包括他们具体实现),比如Int32类型实现了IConvertible接口,就说明Int32具有 IConvertible接口所描述的ToDouble()方法。但IConvertible并没有给出实现ToDouble()的内容,需要由 Int32类型自己实现。
接口用于实现多态。比如Int32,Int64和Single类型都实现了IConvertible借口,那么就说明他们一定都具有ToDouble()方法。所以,定义一个变量是IConvertible类型:
IConvertible c;
然后,无论是给c赋任何实现IConvertible类型的变量,我都能够保证,c至少有一个ToDouble()方法可用,而不用关心c具体是什么类型的变量。如
int i = 3; //Int32
long j = 6L; //Int64
float k = 4F; //Single
则
c = i;
c.ToDouble();
c = j;
c.ToDouble();
c = k;
c.ToDouble();
都不会发生错误。
实现接口的类可以显式实现该接口的成员。当显式实现某成员时,不能通过类实例访问该成员,而只能通过该接口的实例访问该成员。
接口的应用大多数是在Design Pattern时才用到。
抽象类,从多个对象中抽出来的“共性”,而他的后代,既有共性、又有特性。例如:“图形”是抽象的,没有形状,由点线组成;正方形、圆形是他的派生,可以是对象。
2.静态方法与实例方法的区别
静态方法方法是属于类的方法,实例方法是属于由类的对象的方法。
比如:
class A
{
public static void F1() {};
public void F2() {};
}
你可以这样用F1 A.F1(); 但是A.F2()就会出错。
可以这样用F2,
A a = new A(); a.F2(); 但是a.F1()也会出错。
(over)
---------------------------------------------------------------
个人认为,抽象类与接口的作用从本质上讲是一样的,就是规定一些共同的方法。只要某个类是继承自某个抽象类的或实现了某个接口,则其必须完全实现该抽象类或接口中的所有方法。
之所有有两者共存,是因为只支持单一类继承,但可以实现多个接口来实现类似于多重继承的功能。
---------------------------------------------------------------
mark,study
---------------------------------------------------------------
收藏
---------------------------------------------------------------
最基本的区别是:
接口是一种协议,一种约定,一旦发布,就不能更改,只能通过定义新接口来增加功能。而且接口内定义的成员不能在接口中实现。接口中的成员都是“抽象”的。
抽象类可以部分实现成员。而且随意增加新成员,这在一个发布的已被使用
接口中是不能的。
当 然,如果你想把项目从头再来一遍,什么都可改变。可微软发布的 .Net 中的大量接口估计永远也不会改了。这就是接口。而 .Net 的新版本可以对某些类包括抽象类进行一些增强,却不会影响你原来的代码在新版本上的运行。而接口的更改将可能你导致重新编写代码。
---------------------------------------------------------------
欢迎高手。
http://expert.csdn.net/Expert/topic/1146/1146709.xml?temp=.4294245
---------------------------------------------------------------
为什么静态的方法不能调用本类里面的非静态方法呢???
---------------------------------------------------------------
1。抽象类更侧重于归纳同一父类的子类的共同特征,如果属性,方法;接口更侧重于定义任意的类有没有相同语义的方法。
2。 实例的方法可以看作是某个对象的方法,而这个对象是属于你的应用程序的;静态方法你可以看作是你的应用程序的一个方法,再把镜头拉远一点,把你的应用程序 看作是一个对象的话,那么静态方法就是应用程序这个实例的一个方法。至于为什么要有静态方法,我想,当一个类的方法在执行时如果不涉及到某些具体需要实例 化的数据时,都可以归为静态方法。
---------------------------------------------------------------
哈哈哈
这个帖子值得收藏
我得好好想想
---------------------------------------------------------------
班兄的才能和热情是C#版各兄弟有目共睹的,不是一两个人的话就可以颠倒视听的!我相信群众的眼睛都十分雪亮。
再说我觉得abiao也是对事不对人吧,“疑义相与析”时难免有言语的摩擦,最后能把问题搞清楚才是我们C#版兄弟们所追求的真谛,不是吗?
绝对赞成"C#版只有我们自已才能珍惜。努力吧!兄弟们!"!
---------------------------------------------------------------
人民群众的眼睛是雪亮的!
呵呵...
收藏
---------------------------------------------------------------
studying~~
---------------------------------------------------------------
这个贴子是我进C#以来认为比较有价值的贴子中的一篇,前段时间那个"必败"的家伙惹的我心烦,现在总算是看到本版有了很好的讨论问题的气氛了:)
本贴虽然楼主认为有点幼稚,不过我觉得,有时候看似简单的问题,却很值得深入研究,希望以后多出这种贴子...
另外建议置顶...
---------------------------------------------------------------
gz
---------------------------------------------------------------
呵呵,文人相轻
---------------------------------------------------------------
为什么总是有人,想吵架呢,奇怪啊
---------------------------------------------------------------
不错,值得收藏。
---------------------------------------------------------------
接口可以有静态成员、嵌套类型、抽象、虚拟成员、属性和事件。实现接口的任何类都必须提供接口中所声明的抽象成员的定义。接口可以要求任何实现类必须实现一个或多个其他接口。
对接口有以下限制:
接口可以用任何可访问性来声明,但接口成员必须全都具有公共可访问性。
不能向成员或接口自身附加安全性权限。
接口可以定义类构造函数,但不能定义实例构造函数。
每种语言都必须为需要成员的接口映射一个实现提供规则,因为不只一个接口可以用相同的签名声明成员,且这些成员可以有单独的实现。
接口不能执行任何的方法,而抽象类可以。
类可以执行许多接口,但只有一个父类。 这个也有人说用接口可以实现多重继承。
接口不是类分级结构的一部分。而没有联系的类可以执行相同的接口。
具体说说:
接口是对象属性和方法的描述(但不包括他们具体实现),比如Int32类型实现了IConvertible接口,就说明Int32具有 IConvertible接口所描述的ToDouble()方法。但IConvertible并没有给出实现ToDouble()的内容,需要由 Int32类型自己实现。
接口用于实现多态。比如Int32,Int64和Single类型都实现了IConvertible借口,那么就说明他们一定都具有ToDouble()方法。所以,定义一个变量是IConvertible类型:
IConvertible c;
然后,无论是给c赋任何实现IConvertible类型的变量,我都能够保证,c至少有一个ToDouble()方法可用,而不用关心c具体是什么类型的变量。如
int i = 3; //Int32
long j = 6L; //Int64
float k = 4F; //Single
则
c = i;
c.ToDouble();
c = j;
c.ToDouble();
c = k;
c.ToDouble();
都不会发生错误。
实现接口的类可以显式实现该接口的成员。当显式实现某成员时,不能通过类实例访问该成员,而只能通过该接口的实例访问该成员。
接口的应用大多数是在Design Pattern时才用到。
抽象类,从多个对象中抽出来的“共性”,而他的后代,既有共性、又有特性。例如:“图形”是抽象的,没有形状,由点线组成;正方形、圆形是他的派生,可以是对象。
2.静态方法与实例方法的区别
静态方法方法是属于类的方法,实例方法是属于由类的对象的方法。
比如:
class A
{
public static void F1() {};
public void F2() {};
}
你可以这样用F1 A.F1(); 但是A.F2()就会出错。
可以这样用F2,
A a = new A(); a.F2(); 但是a.F1()也会出错。
(over)
---------------------------------------------------------------
个人认为,抽象类与接口的作用从本质上讲是一样的,就是规定一些共同的方法。只要某个类是继承自某个抽象类的或实现了某个接口,则其必须完全实现该抽象类或接口中的所有方法。
之所有有两者共存,是因为只支持单一类继承,但可以实现多个接口来实现类似于多重继承的功能。
---------------------------------------------------------------
mark,study
---------------------------------------------------------------
收藏
---------------------------------------------------------------
最基本的区别是:
接口是一种协议,一种约定,一旦发布,就不能更改,只能通过定义新接口来增加功能。而且接口内定义的成员不能在接口中实现。接口中的成员都是“抽象”的。
抽象类可以部分实现成员。而且随意增加新成员,这在一个发布的已被使用
接口中是不能的。
当 然,如果你想把项目从头再来一遍,什么都可改变。可微软发布的 .Net 中的大量接口估计永远也不会改了。这就是接口。而 .Net 的新版本可以对某些类包括抽象类进行一些增强,却不会影响你原来的代码在新版本上的运行。而接口的更改将可能你导致重新编写代码。
---------------------------------------------------------------
欢迎高手。
http://expert.csdn.net/Expert/topic/1146/1146709.xml?temp=.4294245
---------------------------------------------------------------
为什么静态的方法不能调用本类里面的非静态方法呢???
---------------------------------------------------------------
1。抽象类更侧重于归纳同一父类的子类的共同特征,如果属性,方法;接口更侧重于定义任意的类有没有相同语义的方法。
2。 实例的方法可以看作是某个对象的方法,而这个对象是属于你的应用程序的;静态方法你可以看作是你的应用程序的一个方法,再把镜头拉远一点,把你的应用程序 看作是一个对象的话,那么静态方法就是应用程序这个实例的一个方法。至于为什么要有静态方法,我想,当一个类的方法在执行时如果不涉及到某些具体需要实例 化的数据时,都可以归为静态方法。
---------------------------------------------------------------
哈哈哈
这个帖子值得收藏
我得好好想想
---------------------------------------------------------------
班兄的才能和热情是C#版各兄弟有目共睹的,不是一两个人的话就可以颠倒视听的!我相信群众的眼睛都十分雪亮。
再说我觉得abiao也是对事不对人吧,“疑义相与析”时难免有言语的摩擦,最后能把问题搞清楚才是我们C#版兄弟们所追求的真谛,不是吗?
绝对赞成"C#版只有我们自已才能珍惜。努力吧!兄弟们!"!
---------------------------------------------------------------
人民群众的眼睛是雪亮的!
呵呵...
收藏
---------------------------------------------------------------
studying~~
---------------------------------------------------------------
这个贴子是我进C#以来认为比较有价值的贴子中的一篇,前段时间那个"必败"的家伙惹的我心烦,现在总算是看到本版有了很好的讨论问题的气氛了:)
本贴虽然楼主认为有点幼稚,不过我觉得,有时候看似简单的问题,却很值得深入研究,希望以后多出这种贴子...
另外建议置顶...
---------------------------------------------------------------
gz
---------------------------------------------------------------
呵呵,文人相轻
---------------------------------------------------------------
为什么总是有人,想吵架呢,奇怪啊
---------------------------------------------------------------
不错,值得收藏。
---------------------------------------------------------------
接口可以有静态成员、嵌套类型、抽象、虚拟成员、属性和事件。实现接口的任何类都必须提供接口中所声明的抽象成员的定义。接口可以要求任何实现类必须实现一个或多个其他接口。
对接口有以下限制:
接口可以用任何可访问性来声明,但接口成员必须全都具有公共可访问性。
不能向成员或接口自身附加安全性权限。
接口可以定义类构造函数,但不能定义实例构造函数。
每种语言都必须为需要成员的接口映射一个实现提供规则,因为不只一个接口可以用相同的签名声明成员,且这些成员可以有单独的实现。