c#基础学习(0806)之接口学习
首先了解一下什么是接口:
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)之接口学习的更多相关文章
- 如何学习FPGA?FPGA学习必备的基础知识
如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA 基础知识 FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...
- No2_1.接口继承多态_Java学习笔记_接口
接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象 ...
- C# 常用接口学习 ICollection<T>
C# 常用接口学习 ICollection<T> 作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 2015 参 ...
- C# 常用接口学习 IComparable 和 IComparer
C# 常用接口学习 IComparable 和 IComparer 作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 201 ...
- 2、JavaScript 基础二 (从零学习JavaScript)
11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...
- 1、JavaScript 基础一 (从零学习JavaScript)
1:定义:javascript是一种弱类型.动态类型.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类 ...
- PowerDesigner最基础的使用方法入门学习(转)
PowerDesigner最基础的使用方法入门学习 1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自行学习) 我的PowerDesigner版本是16. ...
- TensorFlow基础笔记(0) 参考资源学习文档
1 官方文档 https://www.tensorflow.org/api_docs/ 2 极客学院中文文档 http://www.tensorfly.cn/tfdoc/api_docs/python ...
- TensorFlow基础笔记(3) cifar10 分类学习
TensorFlow基础笔记(3) cifar10 分类学习 CIFAR-10 is a common benchmark in machine learning for image recognit ...
随机推荐
- winform之combobox
绑定键值对: ArrayList mylist = new ArrayList(); mylist.Add(new DictionaryEntry("WinFormURL", &q ...
- VUE.js 中取得后台原生HTML字符串 原样显示问题
今天使用vue调试页面,发现了页面上的一个问题,后台数据传过来的HTML字符串并没有被转换为正常的HTML代码,一拍脑门,发现忘记转换了,于是满心欢喜加上了{{{}}}.但是之后构建发现报错: 为此去 ...
- 日常一些出现bug的问题
1.Fatal signal 4 (SIGILL), code 1, fault addr 0xca31569e in tid 8033 (r.myapplication) fault addr : ...
- Android 美学设计基础 <2>
我们接着上期的项目进行分享. 1.2.2 Elevation (仰角) 仰角只的是不同的素材块在Z轴上的选对位置 仰角的测量方式 这里只的是两个平面在z的距离,记住我们默认每个平面都是1dp的厚度 1 ...
- Mongoose 分页查询优化、获取数据总长度
无论是传统网页还是 ajax api,我们都不得不进行数据分页,一来节省带宽二来提升页面响应速度.作为一个数据完备的 web 应用,做好分页功能能极大提升用户体验. 简单的分页查询 在 mongoos ...
- 四:MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- Fiddler工具详细介绍
百度看到Fiddler工具的详细介绍,转载收藏,侵权删,原文地址:http://blog.csdn.net/qq_21445563/article/details/51017605 前部分讲解Fidd ...
- Netty核心概念(4)之Bootstrap
1.前言 第三节介绍了Netty的一些基本概念,此节介绍Netty的第一个概念Bootstrap——启动类.Netty中服务端和客户端的启动类是不一样的,这个不要搞错了,类都在bootstrap包下. ...
- Linux 删除文件夹和文件的命令(转载)
Linux 删除文件夹和文件的命令 听语音 | 浏览:93339 | 更新:2013-05-02 18:40 | 标签:linux 文件夹 linux删除目录很简单,很多人还是习惯用rmdir,不过一 ...
- springboot设置静态资源不拦截的方法
springboot设置静态资源不拦截的方法 springboot不拦截静态资源需配置如下的类: import org.springframework.context.annotation.Confi ...