【C#学习笔记】【Interface】

本文介绍了C#中的接口Interface,包括接口的定义、实现(隐式和显式)以及接口继承。接口作为类的行为规范,允许类实现多个接口以达到多继承的效果。文章强调了接口在代码设计中的重要性,特别是在提供通用处理服务和遵守特定契约方面。
摘要由CSDN通过智能技术生成

C#学习笔记系列

第一章 【C#学习笔记】【StackTrace】
第二章 【C#学习笔记】【Attribute】
第三章 【C#学习笔记】【Interface】



前言

在C#的编程中,类是我们每天都会接触到的,但是对于初学者来说,接口就比较陌生了,也许入门学习时有学过,但是经过工作实践,部分新人就会发现,基本不会去用到接口,但是看大神源码,又是处处都有影踪,那么接口到底是什么呢?接下来学习接口(Interface)的概念,接口是什么,怎么使用接口,重点是为什么要使用接口。


一、Interface介绍

  • 接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同“是什么”部分,派生类定义了语法合同“怎么做”部分。
  • 接口定义了属性、方法、事件、索引器等,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。
  • 接口使得实现接口的类或结构在形式上保持一致。
  • 接口是一个引用类型,通过接口可以实现多重继承。
  • 接口中只能声明“抽象”成员,所以不能直接对接口进行实例化,但允许派生出具体的,具有实际功能的类。
  • 接口名称一般习惯用大写字母“I”作为开头(不是必须的,但是建议统一这样做增强可维护性)。
  • 接口中成员的访问权限默认为public,所以我们在定义接口时不用再为接口成员指定任何访问权限修饰符,否则编译器会报错。
  • 接口类一旦被实现(被一个类继承),派生类就必须实现接口中的所有成员,除非派生类本身也是抽象类。
  • 接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。
  • 类只能继承一个基类,但可以继承多个接口。

二、定义接口

2.1. 声明接口

接口使用Interface关键字声明,它与类的声明类似。接口声明默认是public的,也可以显式地声明为public或internal(不能是其他),接口内的成员默认是public,不能显式地添加修饰符,通常接口命令以“I”字母开头:

public interface IMyInterface
{
    void MethodToImplement();
}

2.2. 实现接口

2.2.1. 隐式实现

就是对其中的方法等进行重写

public interface IMyInterface
{
    void MethodToImplement();
}
public class InterfaceImplementer : IMyInterface
{
    public void MethodToImplement()
    {
        Console.WriteLine("MethodToImplement() called.");
    }
}

static void Main()
{
    InterfaceImplementer iImp = new InterfaceImplementer();
    iImp.MethodToImplement();
}

2.2.2. 显式实现

使用接口名点成员实现,创建一个仅通过该接口调用并且特定于该接口的类成员

public interface IMyInterface
{
    void MethodToImplement();
}
public interface ISecond
{
    void Day();
}
public interface IThird
{
    void Sun();
}
public class InterfaceImplementer : IMyInterface, ISecond, IThird
{
    void IMyInterface.MethodToImplement()
    {
        Console.WriteLine("MethodToImplement() called.");
    }
    void ISecond.Day()
    {
        Console.WriteLine("Day() called.");
    }
    void IThird.Sun()
    {
        Console.WriteLine("Sun() called.");
    }
}


static void Main(string[] args)
{
    IMyInterface myInterface = new InterfaceImplementer();
    myInterface.MethodToImplement();
    ISecond second = new InterfaceImplementer();
    second.Day();
    IThird third = new InterfaceImplementer();
    third.Sun();
}

2.2.3. 区别

两者最大区别是,隐式实现是接口和类都可以进行访问,显式实现只有接口才可以访问。

2.3. 接口继承

在C#中,一个接口可以继承另一个接口,例如可以使用接口 1 继承接口 2,当用某个类来实现接口 1 时,必须同时实现接口 1 和接口 2 中的所有成员。
以下实例IMyInterface 继承了IParentInterface接口,因此接口实现类必须实现MethodToImplement()和ParentInterfaceMethod()方法:

public interface IParentInterface
{
    void ParentInterfaceMethod();
}

public interface IMyInterface : IParentInterface
{
    void MethodToImplement();
}

public class InterfaceImplementer : IMyInterface
{
    static void Main()
    {
        InterfaceImplementer iImp = new InterfaceImplementer();
        iImp.MethodToImplement();
        iImp.ParentInterfaceMethod();
    }

    public void MethodToImplement()
    {
        Console.WriteLine("MethodToImplement() called.");
    }

    public void ParentInterfaceMethod()
    {
        Console.WriteLine("ParentInterfaceMethod() called.");
    }
}

三、为什么要使用接口?

1.一个接口内,允许包含变量、常量等一个类所包含的基本内容。但是,接口中的函数不允许设定代码,也就意味着不能把程序入口放到接口里。由上可知,接口是专门被继承的。接口存在的意义也是被继承;
2.接口的主要目的是为不相关的类提供通用的处理服务,由于C#中只允许树形结构中的单继承,即一个类只能继承一个类,但是类可以继承多个接口,所以接口是让一个类具有两个以上基类的唯一方式

总结

不积硅步,何以至千里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值