1.、接口的概念及声明
1.接口只包含方法、属性、索引器、事件的签名,但不能定义常量、字段(域)、构造函数、析构函数、静态成
员和接口不包含方法的实现;
2.接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员(说明:如类A继承接口B,那
么A中必须实现B中定义的属性,方法等)。
3.不能直接实例化接口,可以通过继承实现其抽象方法。
4.支持多继承;可以用于支持回调;可以作用于值类型和引用类型;C#中不能包含任何静态成员
接口自身可以继承多个接口
5.在声明接口时除了Interface和接口名称是必须的,其他都是可选项。另可使用new、public、protected、
intenal和private等修饰符实现接口,但接口成员必须是公共的。
2.接口的使用例子
namespace AppTest
{
class Demo_interface
{
static void Main(string[] args)
{
**//使用(注意,这里是使用接口 IPrint,下面是不同的实例,获得不同功能)**
IPrint I;
I = new A(); //实例化 A,将打印出 A
I.Print();
I = new B(); //实例化 B,将打印出 B
I.Print();
}
}
interface IPrint
{
void Print();**//只定义,不实现**
//IPerson(); //错误
//string name; **//错误 但不能定义字段**
//public void GetIDcard(); //错误
//void GetName(); //正确
//void GetAge(string s); //正确
//int GetHeight(); //正确
}
class A : IPrint
{
//实现接口方法,必须有,
//当然还可以再添加其它的字段、属性、方法
public void Print()
{
System.Console.WriteLine("A");
}
}
class B : IPrint
{
public void Print()
{
System.Console.WriteLine("B");
}
}
}
3.抽象方法的概念及声明
抽象类与非抽象类的主要区别:
1.抽象类不能直接被实例化
2.抽象类中可以包含抽象成员,但非抽象类中不可以
3.抽象类不能被密封
声明抽象方法时需注意:
1.抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象
类,抽象方法必须声明在抽象类中。
2.声明抽象方法时,不能使用virtual、static、private修饰符。
3.当一个类继承于抽象类,那么这个派生类必须实现所有的基类抽象方法和访问器的实现(非抽象类)。
4.一个抽象类可以包含抽象和非抽象方法,抽象方法是一个没有方法体的方法。非抽象方法的抽象类可以写
方法体。
4.如:
abstract class MyAbs
{
public void NonAbMethod()
{
Console.WriteLine("Non-Abstract Method");//非抽象方法的抽象类
}
public abstract void AbMethod(); // An abstract method
}
class MyClass : MyAbs//must implement base class abstract methods
{
public override void AbMethod()
{
Console.WriteLine("Abstarct method");
}
}
class MyClient
{
public static void Main()
{
MyClass mc = new MyClass();
mc.NonAbMethod();
mc.AbMethod();
}
}
4.接口和抽象方法的区别
1.它们的派生类只能继承一个基类,即只能继承一个抽象类,但是可以继承多个接口。
2.抽象类中可以定义成员的实现,但接口中不可以。
3.抽象类中包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以。
4.抽象类中的成员可以私有的(只要不是抽象的)、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的。
注:抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,
例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍然可以完成某些相同的任
务。