C#接口


一、接口有什么作用?

知乎回答①:

“接口是个规范”,这句没错。“不如直接就在这个类中写实现方法岂不是更便捷”,你怎么保证这个接口就一个类去实现呢?如果多个类去实现同一个接口,程序怎么知道他们是有关联的呢?既然不是一个类去实现,那就是有很多地方有用到,大家需要统一标准。甚至有的编程语言(Object-C)已经不把接口叫 interface,直接叫 protocol。统一标准的目的,是大家都知道这个是做什么的,但是具体不用知道具体怎么做。比如说:我知道 Comparable 这个接口是用来比较两个对象的,那么如何去比较呢?数字有数字的比较方法,字符串有字符串的比较方法,学生(自己定义的类)也有自己的比较方法。然后,在另外一个负责对象排序(不一定是数字喔)的代码里面,肯定需要将两个对象比较。这两个对象是什么类型呢?Object a,b?肯定不行,a > b 这样的语法无法通过编译。int a,b?也不行?一开始就说了,不一定是数字。….所以,Comparable 就来了。他告诉编译器,a b 两个对象都满足 Comparable 接口,也就是他们是可以进行比较的。具体怎么比较,这段程序不需要知道。所以,他需要一些具体的实现,Comparable 接口有一个方法,叫 compareTo。那么这个方法就是用来取代 <、> 这样的运算符。因为运算符是编译器保留给内置类型(整数、浮点数)进行比较用的,而不是一个广义的比较运算。如果你可以明白 JDK 自身库里面诸如 Comparable 这样已经有的接口,那么就很容易理解自己在开发程序的时候为什么需要用到接口了。

作者:Dion 
链接:https://www.zhihu.com/question/20111251/answer/14012223 
来源:知乎 
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

知乎回答②: 
接口就是个招牌。比如说你今年放假出去杭州旅游,玩了一上午,你也有点饿了,突然看到前面有个店子,上面挂着KFC,然后你就知道今天中饭有着落了。KFC就是接口,我们看到了这个接口,就知道这个店会卖炸鸡腿(实现接口)。那么为神马我们要去定义一个接口涅,这个店可以直接卖炸鸡腿啊(直接写实现方法),是的,这个店可以直接卖炸鸡腿,但没有挂KFC的招牌,我们就不能直接简单粗暴的冲进去叫服务员给两个炸鸡腿了。要么,我们就要进去问,你这里卖不卖炸鸡腿啊,卖不卖汉堡啊,卖不卖圣代啊(这就是反射)。很显然,这样一家家的问实在是非常麻烦(反射性能很差)。要么,我们就要记住,中山路108号卖炸鸡,黄山路45号卖炸鸡(硬编码),很显然这样我们要记住的很多很多东西(代码量剧增),而且,如果有新的店卖炸鸡腿,我们也不可能知道(不利于扩展)。

作者:Ivony 
链接:https://www.zhihu.com/question/20111251/answer/16585393 
来源:知乎 
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

二、属性怎么写?set、get怎么写? 
happysneaker.com     

happysneaker.com 

三、接口如何定义,需要注意哪些点?

1、接口中的方法和属性都不能添加访问修饰符,默认都是public 
2、接口中的方法不能够实现,只能声明,属性同 
3、声明属性的时候,若只有set就只写set;只有get就只写get; 
4、字段在接口中是不能定义的,只能声明方法和属性 
5、给某个类实现接口,写法与继承父类的方法一样,同时也可以继承父类,但是父类A要放在前面,用逗号分隔(实现多个接口,只要用逗号分隔开就行,如果同时要继承父类,父类必须放在前面) 
6、一旦某个类实现了接口,就必须实现接口中的全部成员,要注意添加访问权限修饰符 
7、不能够实例化接口,比如说Food b = new Food(); 
8、接口也可以实现多态,比如某个实现了接口Food的类Apple实例化:Food b = new Apple(); 这其实也是一种多态,有三种多态的实现方法(抽象、虚方法、多态),接口实现就是一种

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace learning
{    
    //定义一个普通类作为父类
    public class A {

    }    
    
    //定义一个食物接口,接口的名字叫做Food
    public interface Food {
    
        //在食物接口中定义方法
        //1、接口中的方法和属性都不能添加访问修饰符,默认都是public
        //2、接口中的方法不能够实现,只能声明,属性同
        void Eat();        
        
        //接口中还可以定义属性,同时呢,也不可以实现
        //声明属性的时候,若只有set就只写set;只有get就只写get;
        float Price { get; }        
        
        //字段在接口中是不能定义的
    }    
        
    //定义一个接口B
    public interface B {

    }    
    
    //苹果类
    //给苹果类实现Food接口,写法与继承父类的方法一样,同时也可以继承父类,但是父类A要放在前面,用逗号分隔
    //4、实现多个接口,只要用逗号分隔开就行,如果同时要继承父类,父类必须放在前面
    //3、一旦某个类实现了接口,就必须实现接口中的全部成员,要注意访问权限修饰符
    public class Apple : A, Food, B{        
        public float Price {            
            get {                
                return 111.3f;
            }
        }        
                
        public void Eat()
        {
            Console.WriteLine("我是实现了接口中的Eat方法");
        }
    }

    class Program{        
        public static void Main(string[] args)
        {
            Apple a = new Apple();
            a.Eat();//最终调用的是你懂的
            Console.WriteLine(a.Price);            
        
            //这其实也是一种多态,有三种多态的实现方法(抽象、虚方法、多态),接口实现就是一种
            Food b = new Apple();//可以用接口类型实现Apple的对象
            b.Eat();//用接口来定义对象,最终也是调用的Eat方法
            Console.WriteLine(b.Price);            
            
            //6、不能够实例化接口,比如说Food b = new Food();
        }
    }
}

happysneaker.com

Unity那些事儿
请先登录后发表评论
  • 最新评论
  • 总共0条评论