个性化阅读
专注于IT技术分析

C#中抽象类和接口之间的区别

一个抽象类是在C#中实现抽象的一种方法。从不打算直接实例化Abstract类。此类必须包含至少一个抽象方法, 该方法由关键字或修饰符标记抽象在类定义中。 Abstract类通常用于在类层次结构中定义基类。

例子:

//C# program to illustrate the
//concept of abstract class
using System;
  
//abstract class 'G'
public abstract class G {
  
     //abstract method 'gfg1()'
     public abstract void gfg1();
}
  
//class 'G' inherit
//in child class 'G1'
public class G1 : G {
  
     //abstract method 'gfg1()'
     //declare here with
     //'override' keyword
     public override void gfg1()
     {
         Console.WriteLine( "Class name is G1" );
     }
}
  
//class 'G' inherit in
//another child class 'G2'
public class G2 : G {
  
     //same as the previous class
     public override void gfg1()
     {
         Console.WriteLine( "Class name is  G2" );
     }
}
  
//Driver Class
public class main_method {
  
     //Main Method
     public static void Main()
     {
  
         //'obj' is object of class
         //'G' class '
         //G' cannot
         //be instantiate
         G obj;
  
         //instantiate class 'G1'
         obj = new G1();
  
         //call 'gfg1()' of class 'G1'
         obj.gfg1();
  
         //instantiate class 'G2'
         obj = new G2();
  
         //call 'gfg1()' of class 'G2'
         obj.gfg1();
     }
}

输出:

Class name is G1
Class name is  G2

像类一样接口可以将方法, 属性, 事件和索引器作为其成员。但是接口将仅包含成员的声明。接口成员的实现将由隐式或显式实现接口的类给出。

例子:

//C# program to illustrate the
//concept of interface
using System;
  
//A simple interface
interface interface1 {
  
     //method having only declaration
     //not definition
     void show();
}
  
//A class that implements the interface.
class MyClass : interface1 {
  
     //providing the body part of function
     public void show()
     {
         Console.WriteLine( "Welcome to srcmini!!!" );
     }
  
     //Main Method
     public static void Main(String[] args)
     {
  
         //Creating object
         MyClass obj1 = new MyClass();
  
         //calling method
         obj1.show();
     }
}

输出如下:

Welcome to srcmini!!!

抽象类和接口之间的区别

抽象类 接口
它包含声明和定义部分。 它仅包含一个声明部分。
抽象类无法实现多重继承。 通过接口实现多重继承。
它包含构造函数。 它不包含构造函数。
它可以包含静态成员。 它不包含静态成员。
它可以包含不同类型的访问修饰符, 例如public, private, protected等。 它仅包含公共访问修饰符, 因为界面中的所有内容都是公共的。
抽象类的性能很快。 接口的性能很慢, 因为它需要时间来搜索相应类中的实际方法。
它用于实现类的核心标识。 它用于实现班级的外围能力。
一个类只能使用一个抽象类。 一个类可以使用多个接口。
如果许多实现都是相同的并且使用共同的行为, 那么使用抽象类是更好的选择。 如果许多实现仅共享方法, 则使用Interface更好。
抽象类可以包含方法, 字段, 常量等。 接口只能包含方法。
它可以全部, 部分或不实施。 它应得到充分实施。

赞(1)
未经允许不得转载:srcmini » C#中抽象类和接口之间的区别

评论 抢沙发

评论前必须登录!