首先了解一下什么是接口:

1、接口就是一种规范,协议,约定好遵守某种规范就可以写通用的代码

2、定义了一组具有各种功能的方法(只是一种能力,没有具体实现,像抽象方法一样,“关说不做”)

接口存在的意义:多态。

1、多态的意义:程序可扩展性,最终让程序变得更灵活,节省成本,提高效率

2、接口解决了类的多继承问题,同时解决了类继承以后体积庞大的问题

3、从语法的角度来看,接口与抽象类类似

接口的特点总结:

1、接口是一种规范,为了实现多态

2、接口不能被实例化

3、接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符默认为public,不能修改

4、接口中的成员不能有任何实现(“关说不做”,只是定义了一组未实现的成员)

5、接口中只能有方法、属性、索引器、事件,不能有字段

6、接口与接口之间可以继承,并且可以多继承

7、实现接口的子类必须实现该接口的全部成员

8、一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须卸载IA的前面.class MyClass:A,IA{},因为类是单继承的

9、当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract,(抽象类也能实现接口,用abstrac标记)

10、“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)

namespace 接口
{
class Program
{
static void Main(string[] args)
{
//Console.WriteLine("Hello World!");
IFlyable fly = new MyClass();
fly.SayHi();
}
}
//接口不能实例化
//接口就是让子类来实现的 //1.接口可以实现“多继承”(多实现),一个类只能继承自一个父类,但是可以实现多个接口。
//2.接口解决了不同类型之间的多态问题,比如鱼和船不是同一类型,但是都能在水里“游泳”,只是方式不一样 //定义一个接口,建议:一定要以大写I开头
public interface IFlyable
{
//接口里面能包含什么成员,接口里面只能包含【方法】
//方法、属性、索引器、事件==》方法 //接口中的所有成员,都不能显示的写任何访问修饰符
//默认是public的访问修饰符
void SayHi();
void M1(string msg);
//在接口中这样写表示是一个未实现的属性
string Name
{
get;
set;
}
//索引器
string this[int index]
{
get;
set;
}
} //接口中的成员,子类必须实现
public class MyClass : IFlyable
{
public string this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public string Name { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public void M1(string msg)
{
throw new NotImplementedException();
} public void SayHi()
{
throw new NotImplementedException();
}
}
}

直接父类继承接口:

namespace 接口练习3
{
class Program
{
static void Main(string[] args)
{
//Console.WriteLine("Hello World!");
Chinese cn = new Chinese();
American am = new American();
DengJi(cn);
Console.ReadKey();
} public static void DengJi(IShowInfo dengJiObj)
{
dengJiObj.Show();
}
} //定义一个接口
public interface IShowInfo
{
void Show();
} //直接父类继承接口
public abstract class Person:IShowInfo
{
public string Name { get; set; }
public string Age { get; set; }
public string Email { get; set; }
public abstract void Show();
} class Chinese:Person
{
public override void Show()
{
Console.WriteLine("中国,8岁。。。");
}
}
class American : Person
{
public override void Show()
{
Console.WriteLine("美国,18岁。。。");
}
}
class German : Person
{
public override void Show()
{
Console.WriteLine("德国,28岁。。。");
}
}
}

c#基础学习(0806)之接口学习的更多相关文章

  1. 如何学习FPGA?FPGA学习必备的基础知识

    如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识       FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...

  2. No2_1.接口继承多态_Java学习笔记_接口

    接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象 ...

  3. C# 常用接口学习 ICollection<T>

    C# 常用接口学习 ICollection<T> 作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 2015 参 ...

  4. C# 常用接口学习 IComparable 和 IComparer

    C# 常用接口学习 IComparable 和 IComparer 作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 201 ...

  5. 2、JavaScript 基础二 (从零学习JavaScript)

     11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...

  6. 1、JavaScript 基础一 (从零学习JavaScript)

    1:定义:javascript是一种弱类型.动态类型.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类 ...

  7. PowerDesigner最基础的使用方法入门学习(转)

    PowerDesigner最基础的使用方法入门学习   1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自行学习) 我的PowerDesigner版本是16. ...

  8. TensorFlow基础笔记(0) 参考资源学习文档

    1 官方文档 https://www.tensorflow.org/api_docs/ 2 极客学院中文文档 http://www.tensorfly.cn/tfdoc/api_docs/python ...

  9. TensorFlow基础笔记(3) cifar10 分类学习

    TensorFlow基础笔记(3) cifar10 分类学习 CIFAR-10 is a common benchmark in machine learning for image recognit ...

随机推荐

  1. 设计模式之工厂模式(Factory Pattern)

    一.什么是工厂模式? 1.“简单工厂模式”,Simple Factory Pattern 也就是常用的在Factory类中定义静态方法负责new对象的方式. 摘要中提到过“严格地说,这种被称为“简单工 ...

  2. asp.net—自定义轻量级ORM

    大型项目中ORM的使用已经是相当的频繁.目前.NET(C#)中比较流行的ORM框架也有很多,比如SqlSugar,Dapper,Entity Framework(EF)等. 相信很多有2年以上工作经验 ...

  3. WebAPI+Html跨域时对session的支持

    1.Global.asax中添加对Session的支持,重新Init方法: public override void Init() { this.PostAuthenticateRequest += ...

  4. Unity3d ugui 实现image代码换图

    核心脚本代码 Image IMGE = transform.Find("IMGE").GetComponent<Image>();Sprite sprite1 = Re ...

  5. winform :DataGridView添加一列checkbox

    #region 添加checkbox列   public void AddCheckBox()        { DataGridViewCheckBoxColumn columncb = new D ...

  6. Unity实现一个morpher/blendShape

    using UnityEngine; using System.Collections; [RequireComponent (typeof (MeshFilter))] public class B ...

  7. Java Web相关技术(汇聚页)

    Java Web相关技术(汇聚页) 初学Java Web(2)——搭建Java Web开发环境

  8. 洛谷P3369 【模板】普通平衡树(Splay)

    题面 传送门 题解 鉴于最近的码力实在是弱到了一个境界--回来重新打一下Splay的板子--竟然整整调了一个上午-- //minamoto #include<bits/stdc++.h> ...

  9. Memoization-329. Longest Increasing Path in a Matrix

    Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...

  10. falcon nodata 小坑一枚

    按照官方文档配置完一切正常,唯独 nodata, 明明有正常的数据,但是为什么 nodata 会认为是没收到呢 困扰许久,直到看了数据库中的数据才恍然大悟 falcon_portal库中的 hosts ...