接口是方法的抽象,如果同样的方法成员在不同的类里面都会出现,可使用接口给出方法成员的声明,需要该方法成员的类都继承这一接口。
class Program
{
static void Main(string[] args)
{
}
public interface Irun
{
void Run();
}
}
class Test : Irun
{
public void Run()
{
Console.WriteLine("人类是用双脚直立行走!");
}
}
class Fish : Irun
{
public void Run()
{
Console.WriteLine("鱼是用鳍游动!");
}
}
从接口的定义方面来说,接口其实就是类和类之间的一种协定,一种约束。
两个方面:
从使用类的用户角度来看,如果知道某个类继承了Irun接口,那么就可以放心大胆地调用Run方法而不用管Run()方法具体是如何实现的。当然,每个类对于Run()方法的实现有所不同,根据对象的不同,而调用Run()方法将执行不同的操作。
从设计的角度来看,一个项目中有若干类需要去编写。由于这些类比较复杂,编写的工作量比较大,这样每个类就需要占有一个工作人员进行编写。通过接口对使用同一方法的不同进行一种约束,让他们都继承于同一接口,即方便统一管理又方便调用。
接口的声明:
接口声明格式如下
【访问修饰符】 interface 接口名 { 接口成员声明 }
访问修饰符通常使用public,接口名称一般都以“|”作为首字母。接口成员声明不包含数据成员,只能包含方法,属性,事件,索引等成员。接口中只能声明抽象成员,只包含接口的声明不包含实现。接口的实现必须在接口被继承后,由继承接口的派生类完成。
接口成员的声明:
接口中方法成员的声明格式如下
返回值类型 方法名(参数表)
接口成员的访问修饰符默认是public,在声明时不能在为接口成员指定任何访问修饰符,否则编译器会报错。接口成员不能有static,abstract,override,virtual修饰符,使用new修饰符不会报错,但会给出警告:不需要关键字new。
接口成员的访问:
要访问接口的成员,首先要有一个类似继承该接口。创建类的对象,使用“对象名.成员名” 的格式访问接口成员。这是因为,在被继承之前,接口的成员都是抽象的,无法访问,必须在继承接口的类实现接口成员之后,通过该类的对象来访问接口成员。
接口的实现:
接口的实现是有继承接口的类来完成的,在接口实现的过程中,实现接口的类必须严格要求遵守接口成员的声明来实接口的所有成员。接口一旦开始被使用,就不能随意更改,否则就破环了类和类之间的约定。可以根据需要增加新的接口,买足新的需要;也可以修改接口成员的实现代码,调整接口成员的功能。一个类可以继承多个接口。
class Program
{
static void Main(string[] args)
{
Test t = new Test();
t.Name = "小明";
t.Myname();
t.Sing();
t.Dance();
Console.ReadKey();
}
public interface Iname
{
string Name { get; set; }
}
public interface Ising
{
void Sing();
}
public interface Idance
{
void Dance();
}
}
class Test : Iname, Ising, Idance
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public void Dance()
{
Console.WriteLine("玩");
}
public void Sing()
{
Console.WriteLine("我会吃!");
}
public void Myname()
{
Console.WriteLine($"我的名字叫{name}!");
}
}
程序输出结果为: