今天学习了接口和抽象类,但并没有很好的进行整理,所以现在写的时候,脑子里多少有点乱乱的,先从接口开始吧。
interface
接口,规定了所有派生类的需要遵循的标准,接口定义了需要做些什么,但是没有具体的做法,做法的实现由派生类来做。 接口的定义使用关键字Interface,由于需要派生类继承,所以接口默认是public类型,自然private或者protected是不可用的。接口的声明需要使用“I”开头进行标识。
Interface INewInterface{
}
除了声明时的限制,接口的内容也只能包含方法、属性、事件和索引器。接口中所有内容,都不可以使用访问修饰进行修饰,public也除外。方法没有实现主体,只包含一个方法签名;属性则只有一个属性访问器,但可以通过隐藏get或set方法,来实现属性的只读或者只写。
Interface INewInterface
{
int Age{get; set;}
void ShowAge();
}
继承接口的可以是类也可以是结构体,但是都需要实现接口中声明的成员,For example:
class NewClass:INewInterface{
public int Age{get; set;}
public void ShowAge(){
Console.WriteLine($"age:{Age}");
}
}
对于类而言,除了可以继承接口之外,最基本就是类与类之间的继承,但是在C#中,一个类的派生类只能有一个,一个类的基类也只能有一个,但是继承的接口个数是没有限制的。只是在书写上基类必须放在所有接口之前,基类与接口、接口与接口之间使用“,”进行分隔,for example:
class BaseClass{
...
}
Interface IFirst{
...
}
Interface ISecond{
...
}
class ChildClass:BaseClass, IFirst, ISecond {
}
接口之间也可以相互继承,进行扩展,但对于具体的派生类来说,就需要实现所有继承的接口的成员,for example:
Interface IInterfaceA{
void MethodA();
}
Interface IInterfaceB:IInterfaceA{
void MethodB();
}
Class ClassA:IIterfaceB{
public void MethodA(){
...
}
public void MethodB(){
...
}
}
以上是接口的内容,下面说一说抽象类。
抽象类
抽象类和接口很像,也不能实例化,是对于一部分类中相同特性而做出的抽象。只不过与接口不同的地方就是,抽象类除了使用abstarct关键字修饰的方法不能有方法主体,普通的方法可以有方法的实现,派生类继承这些方法。 抽象类的声明使用abstract关键字,指定派生类要实现的方法也需要使用abstract关键字进行修饰,不可以使用private关键字进行修饰并且没有实现主体,具体的操作则是在派生类中重写该方法来实现,需要使用关键字override。For example:
abstract class AbstractClass{
public int Age{get; set;}
public abstract void ShowInfo();
public void DoWork(){
Console.WriteLine("AbstractClass do work");
}
}
class PeopleClass:AbstractClass{
public override void ShowInfo(){
Console.WriteLine($"Age:{this.Age}");
}
}
class Program
{
static void Main(string[] args)
{
PeopleClass pc = new PeopleClass();
pc.Age = 20;
pc.ShowInfo();
pc.DoWork();
}
}
输出:
Age:20
AbstractClass do work
请按任意键继续. . .
可以看的出来,抽象类和普通的类区别也不大,但还有一点接口的特性,像是普通类与接口之间的一个过渡。不像接口那么抽象,但又比普通类更加高级一点,是一种比较灵活的存在。 PS: