c# 接口

2023-05-16

1.接口的特点

接口的定义是指定一组函数成员而不实现成员的引用类型,其它类型和接口可以继承接口。定义还是很好理解的,但是没有反映特点,接口主要有以下特点:

 (1)通过接口可以实现多重继承,
 C# 接口的成员不能有 publicprotectedinternalprivate 等修饰符。
 原因很简单,接口里面的方法都需要由外面接口实现去实现方法体,
 那么其修饰符必然是 public。C# 接口中的成员默认是 public 的,
 java 中是可以加 public 的。
 (2)接口成员不能有 newstaticabstractoverridevirtual 修饰符。
 有一点要注意,当一个接口实现一个接口,这2个接口中有相同的方法时,
 可用 new 关键字隐藏父接口中的方法。
 (3)接口中只包含成员的签名,接口没有构造函数,
 所以不能直接使用 new 对接口进行实例化。
 接口中只能包含方法、属性、事件和索引的组合 。
 接口一旦被实现,实现类必须实现接口中的所有成员,
 除非实现类本身是抽象类。
 (4)C# 是单继承,接口是解决 C# 里面类可以同时继承多个基类的问题。

2.接口的简单使用

class Program
{
    static void Main(string[] args)
    {
        IWorker james1 = new James1();
        IWorker james2 = new James2();
        james1.work("设计");
        james2.work("编程");
        //从这个例子我体会到了有接口的好处,可以想象如果又来了新的员工。
        //如果不采用接口,而是每个员工都有一个单独的类,这样就会容易出错。
        //如果有接口这种协议约束的话,那么只要实现了接口就肯定有接口里声明的方法,我们只需拿来调用。
    }
}
public interface IWorker{ void work(string s); }
class James1 : IWorker
{
    public void work(string s)
    {
        Console.WriteLine("我的名字是James1,我的工作是" +s);
    }
}
class James2 : IWorker
{
    public void work(string s)
    {
        Console.WriteLine("我的名字是James2,我的工作是"+s);
    }
}

3.一个可以实例化接口的特例

class Program
{
    static void Main(string[] args)
    {
        //C#中COM接口是可以实例化的,但其实这种写法是使接口“映射”到某一个类上,实际上创建的是这个类的实例。
        IWorker worker = new IWorker();
    }
}
[ComImport, CoClass(typeof(James1))]
[Guid("d60908eb-fd5a-4d3c-9392-8646fcd1edce")]
public interface IWorker{ void work(string s); }
//ComImport特性发生在tlbimp.exe导入COM类型类库的时候,生成的托管类型会标记有ComImport特性
//Guid特性是一个GUID标识,COM类型是用GUID来标识的。

利用 .NET Reflector 查看时可以很明显的看到 Main 方法里面的代码是:

IWorker worker=new James1();

在这里插入图片描述

4.接口和抽象类的区别

接口用于规范,抽象类用于共性。抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。

接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。

抽象类可以提供某些方法的部分实现,接口不可以。抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。

在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写(这就是为什么说接口是一个类的规范了)。

接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。

此外接口不能包含字段、构造函数、析构函数、静态成员或常量。

还有一点,我们在VS中实现接口时会发现有2个选项,一个是实现接口,一个是显示实现接口。实现接口就是我们平常理解的实现接口,而显示实现接口的话,实现的方法是属于接口的,而不是属于实现类的。

5.接口注意的几点:

1.接口方法不能用public abstract等修饰。
接口内不能有字段变量,构造函数。
2.接口内可以定义属性(有getset的方法)。
如string color { get ; set ; }这种。
3.实现接口时,必须和接口的格式一致。
4.必须实现接口的所有方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c# 接口 的相关文章

随机推荐

  • 启动并测试VNC服务

    启动并测试VNC服务 启动VNC Server的图形接口 语法 vncserver 接口号 注意有空格 例 vncserver 1 查看端口是否开放 netstat antup grep vnc 关闭VNC Server的图形接口 语法 v
  • 《牛客网leetcode20题》Given a string s, partition s such that every substring of the partition is a palind

    题目 xff1a Given a string s partition s such that every substring of the partition is a palindrome Return all possible pal
  • 树莓派 ROS 学习(一)Ubuntu 20.04 桌面和ROS安装

    最近用树莓派弄了一个 Ubuntu 20 04 desktop xff0c 用来做 ROS 的学习 硬件 xff1a 树莓派 4B 8G 版本 书本 xff1a ROS机器人开发实践 和 ROS机器人开发实用案例分析 目录 树莓派搭建 Ub
  • Few-Shot Generalization Across Dialogue Tasks《少数据交互对话生成》

    摘要 基于机器学习的对话管理器能够学习复杂的行为以完成任务 xff0c 但是将其功能扩展到新领域并不容易 我们研究了不同政策处理不合作用户行为的能力 xff0c 以及在学习新的任务 xff08 例如预订酒店 xff09 时如何重新运用完成一
  • winform通过https与服务器进行通信

    C 做客户端 xff08 winfrom xff09 是非常方便的 当winfrom通过https与服务器进行通信时 xff0c 可以选择json xml等数据结构封装要传输的数据 下面是以xml封装数据 xff0c 以https与serv
  • Linux命令总结--sed命令

    简介 sed 是一种在线编辑器 xff0c 它一次处理一行内容 处理时 xff0c 把当前处理的行存储在临时缓冲区中 xff0c 称为 模式空间 xff08 pattern space xff09 xff0c 接着用sed命令处理缓冲区中的
  • Re3 : Real-Time Recurrent Regression Networks for Visual Tracking of Generic Objects

    Re3 Real Time Recurrent Regression Networks for Visual Tracking of Generic Objects 2019 10 04 14 42 54 Paper xff1a https
  • 最新Java面试题大全1000+面试题附答案详解,最全面详细,看完稳了

    进大厂是大部分程序员的梦想 xff0c 而进大厂的门槛也是比较高的 xff0c 所以这里整理了一份阿里 美团 滴滴 头条等大厂面试大全 xff0c 其中概括的知识点有 xff1a Java MyBatis ZooKeeper Dubbo E
  • 程序员必须掌握的十种算法---二分查找算法

    二分查找算法核心代码简单 xff0c 但需要数组是经过排序的 span class hljs variable arr span 要查找的数组 span class hljs variable length span 数组的长度 span
  • 笔试题:在一个字符串中查找子字符串的个数

    题目 xff1a 在一个字符串中查找子字符串的个数 要求 xff1a 两个字符串之间以空格隔开 xff0c 前一个为字符串 xff0c 后一个为要查找的子字符串 结果输出字符串中包含的子字符串的个数 例如 xff1a 输入 xff1a ab
  • 笔试题:输入一串数字,以逗号隔开,将数字排序后输出

    题目 xff1a 输入一串数字 xff0c 以逗号隔开 xff0c 将数字排序后输出 具体要求 xff1a 如果有几个数字是连续的 xff0c 只输出最大的和最小的数字 例如 xff1a 输入 xff1a 1 xff0c 4 xff0c 6
  • C语言-函数指针

    1 函数指针 函数原型 xff1a span class hljs keyword int span span class hljs keyword sum span span class hljs keyword int span a s
  • C语言应用小技巧

    1 求字符串长度 span class hljs preprocessor include lt stdlib h gt span size t span class hljs built in strlen span span class
  • C和指针-编程练习

    第六章 1 查找source字符串中匹配chars字符串中任何字符的第一个字符 xff0c 函数返回一个指向source中第1个匹配所找到的位置的指针 如果source中的所有字符均不匹配 xff0c 返回NULL指针 如果任何一个参数为N
  • Bootloader和BIOS、uboot和grub和bootmgr的区别

    版权声明 xff1a 本文章参考了 Bootloader和BIOS Grub uboot概念 未经作者允许 xff0c 严禁用于商业出版 xff0c 否则追究法律责任 网络转载请注明出处 xff0c 这是对原创者的起码的尊重 xff01 x
  • 医学影像常用名词:

    医学影像处理 xff1a MPR xff1a Multiplanarreconstruction allows images to be created from the original axial plane ineither the
  • MsOS——概述

    自己接触的操作系统也有不少了 xff0c 如RT Thread Cos等 xff0c 这些实时操作系统基本的思想就是围绕任务的调度 更像是一个软件平台 xff0c 提供使用者丰富的软件资源 RT Thread是比较成功的应用于消费类产品的国
  • Pixhawk室内自动控制:参数设置

    Pixhawk室内自动控制 xff1a 参数设置 本文针对使用光流传感器和超声波传感器 xff08 或激光雷达 xff09 的Pixhawk用户 ArduCopter目前 xff08 3 52 xff09 已经能够使用光流传感器提供的位置信
  • python函数--capitalize()方法

    capitalize 方法 描述 Python capitalize 将字符串的第一个字母变成大写 其他字母变小写 语法 capitalize 方法语法 xff1a str capitalize 参数 无 返回值 该方法返回一个首字母大写的
  • c# 接口

    1 接口的特点 接口的定义是指定一组函数成员而不实现成员的引用类型 xff0c 其它类型和接口可以继承接口 定义还是很好理解的 xff0c 但是没有反映特点 xff0c 接口主要有以下特点 xff1a span class token pu