c#回炉重造(七)接口,类继承多重接口,接口的显式实现-爱代码爱编程
(一)接口
使用接口可以在类中包括来自多个源的行为。因为该语言不支持类的多重继承。 此外,如果要模拟结构的继承,也必须使用接口,因为它们无法实际从另一个结构或类继承。
我们创建一个接口,定义两个抽象类,接口不能声明实例数据,如字段、自动实现的属性或类似属性的事件,且接口的命名要以大写I开头。
interface IStuden
{
void Add();
void Bdd();
}
我们再创建两个类继承自接口,用于实现接口中的抽象方法。
class NewStuden : IStuden
{
public void Add()
{
Console.WriteLine(123);
}
public void Bdd()
{
Console.WriteLine(123);
}
}
class WithStuden : IStuden
{
public void Add()
{
Console.WriteLine(456);
}
public void Bdd()
{
Console.WriteLine(456);
}
}
为了使耦合降低,我们再创建一个Quint类,里面构造一个构造器,接收一个IStuden接口类型的值,把他赋值给私有类_istuden,创建一个方法调用具体传入的那个类的方法。
class Quint
{
private IStuden _istuden;
public Quint(IStuden i)
{
_istuden = i;
}
public void Cdd()
{
_istuden.Add();
_istuden.Bdd();
}
}
运用的时候,我们对 Quint类创建实例化对象,传入你要使用的类,我这里将NewStuden类传入,只用修改我们传入的对象就可以,同时也避免了对代码的修改,遵循了开闭原则。
Quint q = new Quint(new NewStuden());
q.Cdd();
我们运行整体代码 查看结果,打印出来两个123,说明我们调用成功了NewStuden类中的两个方法。
(二)类继承多重接口
我们都知道类继承类的话使单一的,但是类继承接口的话使可以继承许多的,一个接口可从一个或多个基接口继承。当接口重写基接口中的方法实现时,必须使用显式接口实现语法。
我们构建两个接口IStudent和ITeach,里面分别创建了一个Add和Bdd的抽象方法。
interface IStudent
{
void Add();
}
interface ITeach
{
void Bdd();
}
我们再创建一个NewClass类来继承这两个接口,并且实现这两个接口中的抽象方法。
class NewClass : IStudent, ITeach
{
public void Add()
{
Console.WriteLine(123);
}
public void Bdd()
{
Console.WriteLine(456);
}
}
我们对类创建实例化对象,并且运用这两个方法。
new NewClass().Add();
new NewClass().Bdd();
运行代码,我们可以看到将这两个方法都打印了出来,这就是类可以继承多重接口。
(三)接口的显式实现
接口的显式实现式c#语言所特有的,当我们使用类来继承多重接口,再创建实例化对象对方法的引用时,我们不想让其中一个抽象方法显示出来就需要使用到接口的显式实现,显式实现还用于处理两个接口分别声明名称相同的不同成员。
同样我们构建两个接口IStudent和ITeach,里面分别创建了一个Add和Bdd的抽象方法。
interface IStudent
{
void Add();
}
interface ITeach
{
void Bdd();
}
现在我们创建一个NewClass类来继承这两个接口,将其中的Add抽象方法构建为显式实现,Bdd抽象方法进行普通实现。
class NewClass : IStudent, ITeach
{
public void Bdd()
{
Console.WriteLine(123);
}
void IStudent.Add()
{
Console.WriteLine(456);
}
}
现在我们对NewClass类创建实例化对象,并且引出我们需要实现的方法,我们可以看到,我们只能对Bdd方法进行引用,Add方法不见了。
当我们要使用Add方法的时候,需要这样做,用student可以看到Add方法但是看不到Bdd方法。
NewClass n = new NewClass();
IStudent student = n;
student.Add();
或者我们可以使用我们要显示的那个接口来对类创建实例化对象,但是这样同样只能看到Add方法看不到Bdd方法。
IStudent student = new NewClass();
student.Add();
你可能不希望为这两个接口都调用相同的实现。 若要调用不同的实现,根据所使用的接口,可以显式实现接口成员。 显式接口实现是一个类成员,只通过指定接口进行调用。 通过在类成员前面加上接口名称和句点可命名该类成员。