C#中的接口和抽象类学习

今天学习了接口和抽象类,但并没有很好的进行整理,所以现在写的时候,脑子里多少有点乱乱的,先从接口开始吧。

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: 以上均是自己学习之后理解所写,水平有限难免会出现错误之处,总是唯恐给阅读到小伙伴造成误导,所以希望能够以质疑的态度去浏览,也希望小伙伴能够批评指出,共同成长。

猜你喜欢

转载自www.cnblogs.com/iNeXTs/p/10074659.html
今日推荐