坚持 成长 每日一篇
前言
一,接口和抽象类的相同点
1.抽象类和接口都包含可以由派生类继承的成员。
2.接口和抽象类都不 能直接实例化,但可以声明这些类型的变量。
3.可以声明接口和抽象类型的变量,变量可以指向派生类(继承接口或抽象类的类型)的对象,但是变量不能访问派生类的其他成员(函数或方法)
二,接口和抽象类的区别
1.派生类只能继承一个抽象类,但是可以继承多个接口
2.抽象类可以拥有函数体的非抽象方法,抽象方法必须在派生类种实现,出发派生类也是抽象的
接口成员必须都在使用接口的类上实现,他们没用函数体。
接口成员可以在使用该接口的抽象类上以抽象方法的方式实现
3.接口成员都是共有的,但是抽象成员确可以是私有的,受保护的,内部的
4.接口不能包含字段,构造函数,析构函数、静态成员或常量
三,两者的作用
抽象类主要用作对象系列的基类,共享某些主要特性,例如,共同的目的和结构。 接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。
四,接口成员的定义与类成员的定义相似,但有几个重要的区别:
1.不允许使用访问修饰符(public、private、protected或internal),所有的接口成员都是公共的。接口成员不能包含代码体。
2.接口不能定义字段成员。
3.接口成员不能用关键字static、virtual、abstract或sealed来定义。
4.类型定义成员是禁止的。
5.但要隐藏继承了基接口的成员,可以用关键字 new 来定义它们
6.在接口中定义的属性可以定义访问块 get 和 set 中的哪一个能用于该属性(或将它们同时用于该 属性)
7.继承一个实现给定接口的基类,就意味着派生类隐式地支持这个接口
实例
1.在接口中定义的属性可以定义访问块 get 和 set 中的哪一个能用于该属性(或将它们同时用于该 属性)
interface IMyInterface {
int MyInt { get; set; }
}
2.实现接口的类必须包含该接口所有成员的实现代码,且必须匹配指定的签名(包括匹配指定的 get 和 set 块),并且必须是公共的。
public interface IMyInterface {
void DoSomething();
void DoSomethingElse();
}
public class MyClass : IMyInterface {
public void DoSomething()
{
}
public void DoSomethingElse()
{
}
}
3.要隐藏继承了基接口的成员,可以用关键字 new 来定义它们,例如:
interface IMyBaseInterface {
void DoSomething();
}
interface IMyDerivedInterface : IMyBaseInterface {
new void DoSomething();
}
4.可以使用关键字 virtual 或 abstract 来实现接口成员,但不能使用 static 或 const。还可以在基类 上实现接口成员
public interface IMyInterface {
void DoSomething();
void DoSomethingElse();
}
class MainClass:IMyInterface
{
public static void Main (string[] args)
{
Console.WriteLine ("Hello World!");
}
public virtual void DoSomething ()
{
System.Console.WriteLine ("DoSomething");
}
public void DoSomethingElse ()
{
System.Console.WriteLine ("DoSomethingElse");
}
}
abstract class AClass : IMyInterface
{
abstract public void DoSomething ();
abstract public void DoSomethingElse ();
}