1.基本概念

接口是一种契约规范,类似于抽象基类。包括方法,属性,索引器和事件作为成员,这些成员只是作为定义,并不在接口中具体实现。

接口创建时注意以下事项:

  1. 继承接口的任何非抽象类都必须实现接口的所有成员
  2. 不能直接实例化接口
  3. 接口可以包含事件,索引器,属性和方法,不包括方法的实现
  4. 类和结构可从多个接口继承,中间用“,”隔开
  5. 接口自身可从多个接口继承

接口声明格式如下

修饰符 interface 接口名称:继承接口列表(非继承接口可省去该部分)

{

接口内容:属性,方法,索引器,事件

}

2.使用实例

如定义一个信息类接口,包含编码和名称属性及信息显示方法。

通过销售类信息和进货类信息继承该接口。

整个文档接口如下:

  • 接口定义
 namespace CSCOMExample
{
public interface Informatioin
{
string Code { get; set; } //编码属性
string Name { get; set; }//名称属性
void ShowInfo();//输出信息方法
} }
  • 进货类
 namespace CSCOMExample
{ /// <summary>
/// 进货信息继承接口
/// </summary>
public class JHInfo : Informatioin //继承接口
{
string code = "";
string name = "";
/// <summary>
/// 实现编码属性
/// </summary>
public string Code
{
get { return code; }
set { code = value; }
}
/// <summary>
/// 实现名称属性
/// </summary>
public string Name
{
get { return name; }
set { name = value; }
}
/// <summary>
/// 实现进货显示信息方法
/// </summary>
void Informatioin.ShowInfo()
{
Console.WriteLine("进货信息:\n" + Code + " " + Name);
}
}
}
  • 销售类
 namespace CSCOMExample
{
/// <summary>
/// 销售信息继承接口
/// </summary>
public class XSInfo : Informatioin //继承接口
{
string code = "";
string name = "";
/// <summary>
/// 实现编码属性
/// </summary>
public string Code
{
get { return code; }
set{code =value; }
}
/// <summary>
/// 实现名称属性
/// </summary>
public string Name
{
get{return name; }
set { name=value; }
}
/// <summary>
///销售信息显示方法
/// </summary>
void Informatioin.ShowInfo()
{
Console.WriteLine("销售信息:\n" + Code + " " + Name);
}
}
}

以上,分别在JHInfo类和XSInfo类中对接口的属性和方法进行了实现。如此,一个信息接口Information就完成了。

再做一个测试程序,检测接口:

 namespace ComText
{
class Program
{
static void Main(string[] args)
{
Informatioin[] Infos = { new JHInfo(), new XSInfo() };//定义接口数组
Infos[].Code = "JH0001";
Infos[].Name = "笔记本电脑";
Infos[].ShowInfo(); Infos[].Code = "XS0001";
Infos[].Name = "荣耀手机";
Infos[].ShowInfo();
Console.ReadLine();
}
}
}

输出结果如下:

C#接口的实现和继承实践的更多相关文章

  1. JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)

    实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...

  2. [Java] 类和接口的初始化步骤 - 继承方面

    类和接口在初始化化时,处理继承层级的方法不一样. 类继承的初始化:通过引用 static 字段,触发某个类的初始化,则声明该字段的类,以及该类的父类被初始化. 接口继承的初始化:通过引用 static ...

  3. 【Java面试题】60 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?

    接口可以继承接口.抽象类可以实现(implements)接口,抽象类可以继承具体类.抽象类中可以有静态的main方法. 问:  抽象类是否可继承实体类 (concrete class) 答: 抽象类是 ...

  4. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

    接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 答:接口可以继承接口.抽象类可以实现(implements)接口,抽象类 ...

  5. 接口和抽象类是否继承了Object

    我们先看一下Java的帮助文档对于Object的描述: Class Object is the root of the class hierarchy. Every class has Object ...

  6. c# 第37节 接口的实现与继承

    本节内容: 1:接口继承注意 2:开发封闭原则: 3:实例解释接口的作用 1:接口继承注意 接口的继承: :类继承具有单根性,接口可多重继承: :接口继承多个接口的时候,派生接口名与父接口用冒号隔开, ...

  7. Spring Security 接口认证鉴权入门实践指南

    目录 前言 SpringBoot 示例 SpringBoot pom.xml SpringBoot application.yml SpringBoot IndexController SpringB ...

  8. 接口是干爹, 继承是亲爹 ---JAVA

    接口(interface)是干爹, 因为你可以有很多很多的干爹爹... 继承(extends)是亲爹, 因为你只能有一个父类, 只有一个亲生的父亲. 单继承,多接口?./>./..

  9. EffectiveC#00--选择定义和实现接口,而不是继承

    1.继承就是说它是某物(is a的关系),针对相关类,而接口是说它有某个功能(behaves like.)可以是不相关的 基类是描述对象是什么,接口描述对象有某种行为. 2.不能在接口里提供任何成员的 ...

随机推荐

  1. vue项目进行时,script标签中,methods事件中函数使用的async/await

    用 async/await 来处理异步 await关键字只能放到async函数里面,通过await得到就是Promise返回的内容:当然也能通过then()去获取,若通过then()获取了则就无Pro ...

  2. 76. Minimum Window Substring (JAVA)

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

  3. 银联支付SDK集成

    下载地址 https://open.unionpay.com/upload/download/Development_kit85427986.rar其实我找了半个小时 也不知道怎么就下载好了 这个我在 ...

  4. UI 设计中的渐变

    简评: 渐变是通过两种或多种不同的色彩来绘制一个元素,同时在颜色的交界处进行衰减变化的一种设计.从拟物到扁平再到渐变,人们慢慢发现它能创造出从未有过的一种色彩感觉 -- 独特.现代和清爽.(本文译者@ ...

  5. linux加固安全之密码复杂度

    随着linux系统使用的普遍性,对linux用户及系统安全要求也随之提升,单纯从单位制度,用户安全意识上来规范,并不能杜绝弱口令,必须从技术上要求用户定时修改复杂的密码,从而提高用户和系统的安全性. ...

  6. u-boot中bss段的使用

    近日在调试uboot时,发现了一个现象,即在relocate_code前如果给未初始化或者初始化值为0的变量赋值的话,则在relocate_code后程序无法正常执行.经过学习,恶补如下知识 BSS段 ...

  7. MYSQL利用merge存储引擎来实现分表

      创建user1和user2两个分表 建表语句如下:只是表名不一样,其他字段信息及主键一致. CREATE TABLE IF NOT EXISTS user1( id INT(11) NOT NUL ...

  8. python出现SyntaxError: Non-ASCII character '\xe6' in file \的错误

    出现这个问题的主要原因是因为python2的编码是ASCII码,文件中有中文的话就得使用utf8编码,只需要在文件的头部加上以下其中一种标注: 一.在文件头部添加如下注释码: # coding=< ...

  9. 任意修改网页内容JS代码

    浏览器输入框执行,chrome需要粘贴后,需要在前面手打javascript: 因为粘贴的会自动过滤 javascript:document.body.contentEditable='true'; ...

  10. 【GDKOI2013选拔】大LCP

    题目 LCP就是传说中的最长公共前缀,至于为什么要加上一个大字,那是因为-你会知道的. 首先,求LCP就要有字符串.既然那么需要它们,那就给出n个字符串好了. 于是你需要回答询问大LCP,询问给出一个 ...