C# --接口学习笔记

参考:https://blog.csdn.net/fjxcsdn/article/details/80156615

.接口与抽象类的差别

      接口为后续的代码编写提供了一个“”协定“,也就是一个规范。提到接口,很容易让人想到抽象类,因为接口与使用方法与抽象类非常相似。接口的特点就是:(1)不能被实例化(2)自身不提供实现代码。

抽象类与接口的差异:

(1)抽象类的成员定义是带有可访问性关键字(例如:public),而接口是不带可访问性的关键字,因为接口中的声明的成员是公共的,所以没有必要添加访问符号

(2)抽象类除了可以包含抽象成员外,还可以包含非抽象成员,也可以包含构造函数。而接口不能包含具备实现代码的成员,也不能包含构造函数。因为接口是另外一种类型,不是类。而抽象类是类的一种。

2.定义接口

     定义接口使用interface关键字

例:public interface IBook{...}  //说明使用I开头默认为接口在默认的情况下,将声明为允许内部访问(internal),即只能在同一程序集合中访问,如果让接口对外公开,只需要加上public 即可。

C++中允许多继承,即一个类可以同时继承多个基类。而在C#中只允许单继承,一个类可以有多个派生类,但是一个子类不能同时继承多个基类。注意假设C类可以从A类类中派生,也可以从B类中派生,但是不能同时从A,B类中派生

例子:

public class A{}
public class B{}
public  class C:A,B{}//错误

但是C可以可以同时实现两个接口

public interface IA{}
public interface IB{}
public class C :IA,IB {} //正确

3.实现接口

由于接口中定义成员都是公共成员,因此在实现接口的时候,无论实现解口还是实现类,必须以公共成员来实现接口的成员,而且必须实现接口的所有成员。

例子:
public interface IX
{
   int Num{get;}
   void work();
}

public class Z:IX
{
 pritected int num{get;set};//错误:成员没有声明为public
 public void work();


}

publci class Y:IX
{
 public int Num
 {
  get{return 0;}
 }
//错误:未实现work方法

}

当然接口也可以继承3接口,如果B接口继承成接口A,那么接口B也就包含了A接口中定义的成员

public interface IA
{
  void DoA{};
}
public interface IB:IA
{

string Name {get;set;}
}
public class Test:IB
{
 public string Name{get;set;}
 public void DoA{}
}

namespace Interface
{
    class Program
    {
        static void Main(string[] args)
        {
            IKL S = new Student(); //声明接口对象
            NBAPlayer objNBAPlater = new NBAPlayer();//声明类对象
           //接口方法调用
            S.KL();
            //类方法调用
            objNBAPlater.KL();
            objNBAPlater.Able();
            Console.ReadKey();

        }
        //声明一个父类
        public class Person
        {
            public void Able()
            {
                Console.WriteLine( "吃喝拉萨睡");
   
            }
        }
        class NBAPlayer : Person//声明一个子类,实现扣篮的能力
        {
            public void KL()
            {
                Console.WriteLine("i can KL");
   
            }
        }
         interface IKL  //定义了一个接口实现扣篮的能力
        {
            void KL(); //接口中不加public等修饰符号
        }
    //扣篮是一种能力,通过调用定义的一个接口可以实现其他类对这种能力的实现。
    //继承父类,父类只有一个。实现一个接口,接口可以有多个,接口相当于干爹。
    //具有了某种能力后,一定会去实现某种能力
        class Student : Person,IKL //继承在前,接口在后
        {
               public void KL()
        {
            Console.WriteLine("我也会扣篮了");
            }           
        }     
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42145502/article/details/85268640