c#图解教程_第十五章_接口

 c#图解教程_第十五章_接口

声明接口


定义:是指一组函数成员而不实现他们的引用类型,所以只能类和结构来实现接口

PS:接口的方法不需要具体的实现  

实现类要做的事情

  1. ?必须在基类列表后面列出接口的名称
  2. ?必须为接口的每一个成员(方法)提供实现?
  3. Run()方法是接口实现方法
  4. 接口不能定义字段和静态成员?
  5. 接口成员不允许有任务的访问修饰符,默认是public
  6. ?接口名必须要以大写‘I‘开头(IText)
public interface IAnimal{
     void Run(string AnimalName);
}

class Cat:IAnimal{
public void Run(string name){ Console.WriteLine($"{name} can be run") } }

class Dog: IAnimal{
       public void Run(string name){
          Console.WriteLine($"{name} can be run")
    }
}

public class Program{
public static void Main(){
Cat cat = new Cat();
cat.Run("cat");
Dog dog = new Dog();
dog.run();
}
}

 c#图解教程_第十五章_接口

 

 

接口是引用类型


 接口不仅仅类或结构要实现的成员列表。他是一个引用类型

一个类可以继承多个接口

接口定义方法的具体实现的载体?
public class StructClass:IClass{
   int count = 0;
   public void AddCount(){
       count +=1;
   }
   public void ShowCount(){
     Console.WriteLine(count)
    }
    
}

public interface IClass{
void AddCount();
void ShowCount();
}
class Program {   ? static void Main(string[] args) {   ?
StructClass s1 = new StructClass();   ?StructClass s2 = s1;    ?s1.AddCount();    ?s1.ShowCount(); //输出1    ?s2.ShowCount(); //输出0   ? //说明s2和s1不指向同一个对象,s2=s1是创建了一个s1的副本   ? //这是值类型很显著的标志   ?  ?IClass ic1 new StructClass();    ?IClass ic2 = ic1;    ?ic1.AddCount();   ?ic1.ShowCount();//输出1   ?ic2.ShowCount();//输出1   //说明s2和s1指向同一个对象,s2=s1是将s1的引用赋给s2   ? //这是引用类型很显著的标志   ?} } 

 

 接口和as运算符


定义:使用as 运算符可以指定接口所实现的类

//如上图代码稍作修改
public static void Main(){
    StructClass s1 = new StructClass();
    IClass ic1 = s1 as IClass;
    ic1.AddCount();
    ic1.ShowCont(); //输出1 

}

 

多个接口同名方法的引用用显示命名法区分


public interface IClass1{
    //输出
     void Print();
}

public interface IClass2{
      //输出
     void Print();
}

public class StructClass:IClass1,IClass2{
    
   //两种解决方案
   //一种多个接口同名方法用一种实现通用解决
   public void Print();
  
   //第二种解决方案,使用限定接口名
   public void IClass1.Print(){
    Console.WriteLine("IClass1 print");
   }

   public void IClass2.Print(){
    Console.WriteLine("IClass2 print");

//值得注意一点的是,使用限定接口名会影响类的继承
public void Method1()
Print(); //编译错误
this.Print(); //编译错误
((IClass1)this).Print(); //使用限定后的名称编译 }
}

 

接口可以继承接口


 

定义:与类不同,它在基类列表中只能有一个类名,而接口可以在基接口列表中任意多个接口

  • 列表中的接口本身可以继承其他接口
  • 接口包含它声明的所有接口和所有基接口的成员
  • 多个接口被一个接口继承时,当这个集合被实现时,需要实现该接口的的所有接口方法
public interface IClass1{
         void Point1();
}

public interface IClass2:IClass1{          
        void Point2();
}

public class StructClass:IClass2{
       //两个方法都得实现
       public void Point1();   
       public void Point2();  
}

public class Demo{

public static void Main(){
StructClass1 s1 = new StructClass1();
DemoTest(s1);
}


public void DemoTest(IClass1 c1){
c1.Point1();
   }
}

 

c#图解教程_第十五章_接口

上一篇:Android 如何调节LatinIME键盘上的字体大小


下一篇:Linux中挂载详解以及mount命令用法