美文网首页
C#——关于接口interface

C#——关于接口interface

作者: 一个有味道的名字 | 来源:发表于2017-03-20 15:24 被阅读100次

    关键字 interface 接口,很多高级面向对象编程语言都有接口这一个知识点。
    这里记录一下关于接口的一些东西:接口是一种规范,
    只要一个类继承了一个接口,那么这个类就必须要实现该接口中的所有成员
    对于接口本身而言:
    1、接口不能被实例化
    2、接口中的成员不能被访问修饰符给标记,默认情况下都是public
    3、接口可以去继承接口,并且可以继承多个接口,但是在继承接口的时候,不能去实现被继承接口中所定义的方法、属性、索引器以及事件
    4、接口不能继承类
    5、接口名字一般都是以 I 开头
    6、接口中只能有方法、属性、索引器以及事件,而且只能定义,不能实现
    7、接口成员会自动成为公共成员,不能包含任何访问修饰符。 成员也不能是静态成员

    对于类继承接口而言:
    1、如果一个类继承了接口A,而接口A又继承了接口B,那么这个类就需要实现接口A和接口B中所有的成员
    2、一个类如果继承了另一个类,并且又继承了一个接口,在语法上,父类的名称要写在接口前面 比如: class A:B,IC{}
    3、当实现继承的接口中的方法时,不能使用override关键字,这并不是重写该方法,而是实现该方法
    4、如果基类实现接口,则从基类派生的任何类都会继承该实现,但是派生类可以重新实现接口,不用继承来的实现
    5、如果一个类继承两个接口,而两个接口中有相同名称的方法,或者有相同名称的却一个是方法,一个是属性, 这个时候,这个类如果要实现这两个接口,就需要显示接口实现,也就是接口名加上点运算符,比如:interface IA
    {
    void print();
    }
    interface IB
    {
    void print();
    }
    public class Z:IA,IB
    {
    public void IA.print(){
    Console.WriteLine("this is IA");
    }
    public void IB.print()
    {
    Console.WriteLine("this is IB");
    }
    }

    还记得C#的里氏转换原则么?我们可以用这个原则显示实现接口成员也就是说,虽然我们不能直接创建接口的实例,但是我们可以让使用继承了接口的类来模拟创建接口的实例比如:
    interface IDimensions
    {
    float getLength();
    float getWidth();
    }

    class Box : IDimensions
    {
    float lengthInches;
    float widthInches;
    Box(float length, float width)
    {
    lengthInches = length;
    widthInches = width;
    }
    float IDimensions.getLength()
    {
    return lengthInches;
    }
    float IDimensions.getWidth()
    {
    return widthInches;
    }
    static void Main()
    {
    Box box1 = new Box(30.0f, 20.0f);
    IDimensions dimensions = (IDimensions)box1;//强转
    //或者我们可以这样: IDimensions dimensions = new Box(30.0f,20.0f);
    System.Console.WriteLine("Length: {0}", dimensions.getLength());
    System.Console.WriteLine("Width: {0}", dimensions.getWidth());
    }
    }当然,这里只是实现了关于接口的方法,还有比如说,属性,索引器,以及事件都没实现,网上的例子很多,这里就不记录了。最后给msdn上的传送门:https://msdn.microsoft.com/zh-cn/library/ms173156.aspx ;

    相关文章

      网友评论

          本文标题:C#——关于接口interface

          本文链接:https://www.haomeiwen.com/subject/lfpbnttx.html