interface-C#接口-统一的标准

文章目录

  • 接口的定义
  • 接口的实现
    • 实例1
    • 实例2
  • 接口的继承

  • 博主写作不容易,孩子需要您鼓励
  • 万水千山总是情 , 先点个赞行不行

接口是面向对象编程的一个重要技术,在C#中负责实现多重继承。一个接口定义一个协定,实现接口类或结构体必须遵守其协定。比如耳机接口,比如显示器接口。

接口的定义

接口用来描述一种程序的规定,可以 属于任何类或者结构体的一组相关行为。接口可由方法、属性、事件、索引器或这4种成员类型任何组合构成。接口不能包含常数、字段、运算符、实例构造函数、析构函数或类型,也不能包含任何种类的静态成员。接口成员一定是公共的。

  • 定义接口的语法格式如下:
  • <访问修饰符> interface 接口名{//接口主体}
    

    接口不能包含其所定义的成员的任何实现语句,接口只指定实现该接口的类或必须提供的成员。

    接口的实现

    定义了接口后,就要在类或结构中实现。C#中通常把派生类和基类的关系称为继承,类和接口的关系称为实现。实现接口的语法和继承类一样,都有“:”,接口中的方法在类中实现时不是重载,不需要使用override关键字。
    接口中不能定义构造函数,所以接口不能实例化。

    实例1

    声明接口IPoint描述一个点的坐标并实现该接口。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace test
    {class Program{static void Main(string[] args){Point p = new Point(5, 10);Console.WriteLine("创建的新点坐标为:");Console.WriteLine("X={0},Y={1}", p.x, p.y);Console.ReadKey();}}interface IPoint               //定义Point接口类{                                int x { get; set; }int y { get; set; }}public class Point : IPoint{private int px;private int py;public Point(int x,int y){px = x;py = y;}//接口属性实现public int x{get { return px; }set { px = value; }}public int y{get { return py; }set { py = value; }}}
    }
    

    运行结果:
    在这里插入图片描述
    对接口的名称建议以I开头,如IPoint,对接口的访问修饰符可以选择使用,但是接口的方法前面不能添加任何访问修饰符,他是隐式公开的;接口不能包含构造函数,接口不能实现任何方法、属性和索引器。

    实例2

    定义一个接口,接口包含方法,并使用一个类实现接口。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace test
    {class Program{static void Main(string[] args){Person person1 = new Person("小明", 18, "男");//利用有参构造函数创建对象person1.DisPlay();                              //调用DisPlay方法显示信息person1.DoWork();person1.DoSport();Console.ReadKey();}}interface IPerson               //定义Point接口类{void DoWork();             //声明方法void DoSport();}public class Person:IPerson{private String _id;         //身份证号码字段idpublic string ID            //身份证号码属性id{get { return this._id; }set { this._id = value; }}private String _name;       //姓名字段public string Name          //姓名属性{get { return this._name; }set { this._name = value; }}private int _age;           //年龄字段public int Age              //年龄属性{get { return this._age; }set { this._age = value; }}private String _gender;       //性别字段public string Gender          //性别属性{get { return this._gender; }set { this._gender = value; }}public Person()                 //无参构造函数{ }public Person(string name, int age, string gender)    //有参构造函数{this._name = name;this._age = age;this._gender = gender;}public void DoWork(){Console.WriteLine("{0}的任务是工作", this._name);}public void DoSport(){Console.WriteLine("{0}喜欢做运动", this._name);}public void DisPlay()           //基类共用方法,显示人的信息{Console.WriteLine("{0}是{1}性,年龄为{2}岁", this._name, this._gender, this._age);}}
    }
    

    运行结果:
    在这里插入图片描述

    接口的继承

    C#中的派生类只能有一个基类,不支持类的多重继承,但可以继承多个接口,通过接口实现多继承。如在现实中儿子不但可以继承父母的财产,如伯父我儿女,也可以继承伯父的财产,在C#中这属于多重继承,要用接口来实现,其实接口就是为了实现多重继承而产生的。在C#中接口可以多继承,接口之间可以相互继承,普通类和抽象类可以继承自接口。一个类可以同时继承一个类和多个接口,但是接口不能继承类。

    ------------------------------------------------------------------------------------------分割线
    ------------------------------------------------------------------------------------------
    
    • 博主简介:
    • 工业自动化上位机软件工程师、机器视觉算法工程师、运动控制算法工程师。目前从业于智能制造自动化行业。 博主邮箱:2296776525@qq.com
    • 帮忙点个赞吧。哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter入门(1):JMeter总体介绍及组件介绍

一、JMeter概述 JMeter就是一个测试工具&#xff0c;相比于LoadRunner等测试工具&#xff0c;此工具免费&#xff0c;且比较好用&#xff0c;但是前提当然是安装Java环境&#xff1b;JMeter可以做(1)压力测试及性能测试&#xff1b;(2)数据库测试&#xff1b;(3)Java程序的测试…

二层交换机、三层交换机和路由器的基本工作原理和三者之间的主要区别

二层交换机:二层交换技术是发展比较成熟&#xff0c;二层交换机属数据链路层设备&#xff0c;可以识别数据包中的MAC地址信息&#xff0c;根据MAC地址进行转发&#xff0c;并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。 具体如下&#xff1a; &#xff08;1&…

Unity3D:视物有点眩晕的原因

设置Main Camera 的 Field of View 为100&#xff0c;看物体总觉得很不舒服。 设置为 60 就正常了。 根本原因&#xff0c;有待于分析 转载于:https://www.cnblogs.com/makebetter/p/7063694.html

使用jQuery清空file文件域的解决方案

使用jQuery清空file文件域的解决方案 var file $("#file") file.after(file.clone().val("")); file.remove();

更改mysql最大连接数

方法一&#xff1a; 打开cmd&#xff0c;用"mysql -u root -p;"命令进入mysql, 输入命令&#xff1a;show variables like "max_connections" 显示最大连接数 更改最大连接数 : set global max_connections 5000 方法二&#xff1a; 在my.ini加上 max_co…

根据HTML5 获取当前位置的经纬度【百度地图】【高德地图】

是想让地图的定位用户位置更准确一些。 查看了介绍&#xff1a; http://www.w3school.com.cn/html5/html_5_geolocation.asp 看介绍中拿数据挺简单。 <!DOCTYPE html> <html> <body> <p id"demo">点击这个按钮&#xff0c;获得您的坐标&…

C#抽象类与密封类-abstract-sealed

文章目录抽象类和抽象方法实现抽象方法接口、类和抽象类密封类博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 如果说继承是面向对象设计理论的基石&#xff0c;那么抽象理论和方法就是继承理论的顶梁柱。 抽象类和抽象方法 简单的说&#x…

vs2010快捷键

Ctrl M O: 折叠所有方法 Ctrl M M: 折叠或者展开当前方法 Ctrl M L: 展开所有方法 1、强迫智能感知&#xff1a;CtrlJ&#xff1b;2、强迫智能感知显示参数信息&#xff1a;Ctrl-Shift-空格&#xff1b;3、格式化整个块&#xff1a;CtrlKF4、检查括号匹配(在左右括号间切…

startup毕业论文

今天起得相对比较晚&#xff0c;为的是一个没有目的面试&#xff0c;去了的结果。只是打击一下自己的自信心&#xff0c;走的时候&#xff0c;面试官冷冷的说了一句&#xff0c;你的面试到此结束&#xff0c;是的&#xff0c;我并没有很伤心&#xff0c;在门外等面试的时候&…

Javascript实现信息滚动效果的方法

<html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>向上无缝滚动</title><style>body { font-size: 12px; line-height: 24px; text-algin: center; /* 页面内容居中 */}* { ma…

C# delegate与event,委托与事件

文章目录委托示例事件实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 委托和事件是C#中两个比较复杂的概念&#xff0c;这篇文章介绍两个概念与基本用法&#xff0c;让大家理解C#中的事件处理机制。 委托 委托也叫代理&#xff0c;就是把…

路由器与交换机的工作原理

路由器与交换机的工作原理 计算机网络往往由许多种不同类型的网络互连连接而成。如果几个计算机网络只是在物理上连接在一起&#xff0c;它们之间并不能进行通信&#xff0c;那么这种“互连”并没有什么实际意义。因此通常在谈到“互连”时&#xff0c;就已经暗示这些相互连接的…

Java的四种引用,强弱软虚,用到的场景(转+补充)

Q1&#xff1a;引用队列是什么&#xff1f;如何使用&#xff1f;使用的场景有哪些&#xff1f; A1:oracle的api文档的描述&#xff1a; https://docs.oracle.com/javase/7/docs/api/java/lang/ref/ReferenceQueue.htmlReference queues, to which registered reference objects…

C# lambda表达式与匿名方法

文章目录匿名方法Lambda表达式实例实例博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 C#中的匿名方法是在C#2.0引入的&#xff0c;它终结了声明委托的唯一方法是使用命名方法的时代。在C#更高版本中&#xff0c;Lambda表达式取代了匿名方法&a…

LINUx打包命令汇总

.tar 解包&#xff1a;tar xvf FileName.tar 打包&#xff1a;tar cvf FileName.tar DirName &#xff08;注&#xff1a;tar是打包&#xff0c;不是压缩&#xff01;&#xff09; ——————————————— .gz 解压1&#xff1a;gunzip FileName.gz 解压2&#xff1a;…

常用的相似度计算

在数据分析和数据挖掘的过程中&#xff0c;我们经常需要知道个体间差异的大小&#xff0c;进而评价个体的相似性和类别。最常见的是数据分析中的相关分析&#xff0c;数据挖掘中的分 类和聚类算法&#xff0c;如K最近邻&#xff08;KNN&#xff09;和K均值&#xff08;K-Means&…

玩转C#窗体-属性、方法和事件详细说明

文章目录简介Windows窗体的基本属性一、布局属性1、StartPosition属性2、Location属性3、尺寸属性4、WindowsState属性5、Autoscroll属性6、AutoSize属性二、样式属性1、ControlBox属性2、MaximizeBox属性3、MinimizeBox属性4、HelpButton属性5、ShowIcon属性6、Icon属性7、Sho…

for循环和数组练习

//公鸡2文&#xff0c;母鸡1文&#xff0c;小鸡半文&#xff0c;每种至少一只&#xff0c;100文买100只鸡有多少种可能var ci 0; for(var g1;g<50;g){for(var m1;m<100;m){for(var x1;x<100;x){if(g*2m*1x*(0.5)100&&gmx100){ci1;console.log("买公鸡&qu…

CMD下查看路由表

在cmd下面输入route print 就可以查看路由表 如何读懂路由表如何读懂路由表 源码:--------------------------------------------------------------------------------Active Routes: Network Destination Netmask Gateway Interface M…

c# automapper 使用

一、最简单的用法 有两个类User和UserDto 1 public class User2 {3 public int Id { get; set; }4 public string Name { get; set; }5 public int Age { get; set; }6 }7 8 public class UserDto9 { 10 public string Na…