当前位置: 首页 > article >正文

C# 里接口(Interface)应用说明

一.C# 里接口(Interface)的定义

接口(Interface)在C#中是一种成员的抽象声明,它包含属性、方法、事件和索引器的声明,但不包含实现。接口定义了一个可供一个或多个类实现的协定。接口提供了一种定义某一类型应具有哪些成员的方式,而不涉及成员的实现细节。接口的定义使用interface关键字,接口成员的定义不包含访问修饰符,默认是public。

二.接口的特点

2.1通过接口可以实现多重继承,C# 接口的成员不能有 public、protected、internal、private 等修饰符。原因很简单,接口里面的方法都需要由外面接口实现去实现方法体,那么其修饰符必然是 public,C# 接口中的成员默认是 public 的。

2.2接口成员不能有 new、static、abstract、override、virtual 修饰符,当一个接口实现一个接口,这2个接口中有相同的方法时,可用 new 关键字隐藏父接口中的方法。

2.3接口中只包含成员的签名,接口没有构造函数,所以不能直接使用 new 对接口进行实例化。接口中只能包含方法、属性、事件和索引的组合。接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类。

2.4C# 是单继承,接口是解决 C# 里面类可以同时继承多个基类的问题。

三.接口的简单示例

3.1示例界面

3.2示例源码

            static void Test122()
            {
                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)
            {
               
                MessageBox.Show("我的名字是James1,我的工作是" + s);
            }
        }
        class James2 : IWorker
        {
            public void work(string s)
            {
                
                MessageBox.Show("我的名字是James2,我的工作是" + s);
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            Test122();
        }

四.总结

  接口是C#编程中非常重要的概念,它允许我们定义一组行为或特征的契约,并由不同的类来实现这些行为或特征。通过使用接口,我们可以编写更加灵活、可维护和可重用的代码。在选择使用接口还是抽象类时,我们需要根据具体的需求和场景来做出决策。最后,我们还探讨了接口作为方法参数和返回值的用法,这进一步展示了接口在C#编程中的强大功能。


http://www.kler.cn/news/361512.html

相关文章:

  • 信息收集-IP查询和利用搜索引擎收集
  • html 登入界面,用户注册界面相关的标签及案例
  • React 基础阶段学习计划
  • 资讯 | 财富通科技政务协同办公管理软件通过麒麟软件适配认证
  • Windows环境下Qt Creator调试模式下qDebug输出中文乱码问题
  • C# SM2 加签、验签工具
  • 服务器文件夹挂载到客户端
  • 修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)
  • Vue3 学习笔记(三)Vue3 项目打包及目录结构说明
  • TCP传输机制探索:滑动窗口,流量控制、拥塞管理、快重传、延迟应答详解
  • 【汇编语言】第一个程序(一)—— 一个源程序从写出到执行的过程
  • C# Linq常用方法
  • CSS3 动画相关属性实例大全(四)(font、height、left、letter-spacing、line-height 属性)
  • Web Service
  • 【力扣刷题实战】用队列实现栈
  • Vue3集成axios实现ajax请求
  • linux—基础命令及相关知识
  • Mysql同步数据库异常
  • 使用InternVL、LMDeploy和GTE搭建多模态RAG系统
  • 界面耻辱纪念堂--可视元素03
  • Python 曲线绘制
  • C++ 红黑树
  • 鸿蒙--页面跳转
  • 【鸿蒙NEXT】SaveButton保存图片
  • 无需扩散,下一个token预测直达AGI!
  • kubeadm部署的k8s证书过期解决