C#入门基础三
封装:简化用户接口,隐藏实现细节。 get{return 属性值;} set{属性值 = value;}
继承:子类继承父类所有非私有成员。继承具有传递性,单根性。 隐式继承:用引号(:)实现。 显示继承:关键字(:base)实现。
显示继承与隐式继承的区别: 简单来说就是说 如果继承的一堆接口中 有2个或者2个以上的接口有同名的属性/方法,而它们又是不同的功能的话,你就应该显示继承接口 反过来 随意(一般用隐式,因为可以偷懒) 如果你很犹豫应该用哪一种 而又必须保证不会出问题 直接使用显式
方法的重写:重写必须发生在继承基础之上。可用关键字virtual设置为虚方法,在用override重写。或用关键字new重写。 virtual关键字使用语法:[访问修饰符]virtual[返回类型]方法名称(参数列表) 重写可以重写 虚方法、 已经重写过的方法 、抽象方法
抽象类与抽象方法: 抽象类:不能被实例化的类称为抽象类,抽象类是派生类的基础。抽象类只能被普通类继承并实现。关键字abstract抽象类 不能实例化、 能被普通类继承并实现 定义语法:abstract class<类名>
抽象方法:抽象方法没有方法体,只能定义在抽象类中。
抽象类可以不写抽象方法,但抽象方法一定得放在抽象类中。
接口: 定义语法:[访问修饰符]interface<接口名> 关键字:interface 定义接口名一般都是以"i"开头,例:iname 接口主体不能写带方法体的方法;不能写访问修饰符;不能写属性。
接口与抽象类的区别: 抽象类 接口
用abstract定义 用interface定义
只能继承一个类 可以实现多个接口
非抽象派生类必须实现抽象方法 实现接口的类必须实现所有成员 不同点
需要override实现抽象方法 直接实现
不能被实例化 相同点 包含为实现的方法 派生类(子类)必须实现未实现的方法
===============================================================================================
索引器:关键字==this 【C#通过提供索引器,可以象处理数组一样处理对象。特别是属性,每一个元素都以一个get或set方法存在。 作用:索引器可以使用户像访问数组一样访问类成员。
语法: [访问修饰符]数据类型 this[数据类型 标识符]
{ get{} set{} }
例:namespace syq {
class Program
{ static void Main(string[] args)
{ Clas cls = new Clas(3);
Student stu = null; //创建三个学生信息,并向班级中加载学生信息
for (int i = 0; i < 3; i++) {
stu = new Student("蓝天" + (i + 1));
cls[i] = stu; }
//按索引进行检索并显示结果
Console.WriteLine(cls[2].Name);
//按姓名进行检索并显示结果
Console.WriteLine(cls["蓝天1"].Name); } }
class Class3 { } /// <summary> /// 学生信息类 /// </summary> public class Student
{ private string _name; public Student(string name) { this._name = name; } public string Name { get { return this._name; } } } /// <summary> /// 班级类,即学生的集合 /// </summary> public class Clas { //用于存放学生信息的数组 private Student[] _students; //用于创建班级时必须指定该班级的大小 public Clas(int count) { this._students = new Student[count]; } //传递的索引用于对照片数组进行检索 public Student this[int index] { get { if (index < 0 || index >= this._students.Length)//验证索引范围 { Console.WriteLine("索引无效"); return null; } return _students[index];//对于有效索引,返回请求的学生信息 } set { if (index < 0 || index >= this._students.Length)//验证索引范围 { Console.WriteLine("索引无效"); return; } //对于有效索引,像数组加载新的学生信息 this._students[index] = value; } } //这里定义的按学生姓名检索照片的索引是只读的 public Student this[string name] { get { //循环遍历数组中的所有学生信息 foreach (Student s in this._students) { if (s.Name == name)//将学生的姓名与索引器参数进行比较 return s; } Console.WriteLine("未找到"); return null; }
} } }
】
委托:关键字==delegate 【 委托包含对方法而不是方法名称的引用。使用委托可以在运行时动态设定要调用的方法。委托可以理解为是一个指向方法的指针,它是类型安全的。 它具有两大特点:面向对象,类型安全和可靠的。
委托若要执行某一方法,则返回类型与参数列表必须和方法一致。 语法:[访问修饰符]delegate 返回类型 委托名(参数列表);
例:namespace weituo { class Program { static void Main(string[] args) { pengge pp = new pengge(); pp.chi(); } //定义委托。委托若执行方法,返回类型与参数列表必须和方法相同 public delegate string pgg(int money); //委托者 public class pengge { public void chi() { zhaoshuai mm = new zhaoshuai(); //实例化委托 pgg cc = new pgg(mm.mai2);//调用委托 Console.WriteLine(cc(2)); } } //执行者 public class zhaoshuai { public string mai() { return "烧饼"; } public string mai2(int money) { return "又买烧饼?!!!!"; } } } } 】
事件:关键字==event 【 事件是一种特殊的委托。
语法:[访问修饰符]event 委托名 事件名;
例:namespace shijian {
class Program {
static void Main(string[] args) { pengge pgg = new pengge(); pgg.chi(); } //定义委托 public delegate void dlgt(); public class pengge { //定义事件 public event dlgt myevent; public void chi() { zhaoshuai zs = new zhaoshuai(); //订阅事件 myevent += new dlgt(zs.maifan); myevent += new dlgt(zs.toudu); myevent += new dlgt(si); //触发事件 myevent(); } public void si() { Console.WriteLine("原来是这样"); } } public class zhaoshuai { public void maifan() { Console.WriteLine("又买饭?!"); } public void toudu() { Console.WriteLine("鹏哥威武!毒死你!"); } } } } 】
事件与委托的区别: 事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托.
通俗的讲,委托你可以在客户代码中直接调用委托来激发委托指向的函数,而事件不可以,事件的触发只能由服务代码自己触发
也就是说在你的代码里委托你不但可以安排谁是它的调用函数,还可以直接调用它,而事件不能直接调用,只能通过某些操作触发
C#入门基础三的更多相关文章
- Linux入门基础(三):Linux用户及权限基础
用户基础 用户和组 每个用户都拥有一个userid 每个用户都属于一个主组,属于一个或多个附属组 每个组拥有一个groupid 每个进程以一个用户身份运行,受该用户可访问资源限制 每个可登陆用户拥有一 ...
- mybatis入门基础(三)----SqlMapConfig.xml全局配置文件解析
一:SqlMapConfig.xml配置文件的内容和配置顺序如下 properties(属性) settings(全局配置参数) typeAiases(类型别名) typeHandlers(类型处理器 ...
- Objective-C 快速入门--基础(三)
1.OC有几种方式创建字符串对象?如:如何创建一个字符串对象:@“Baby”. OC中有3种方式创建字符串对象: 示例:main.m文件中: 控制台输出: 2.OC中如何获取字符串的长度? OC中获取 ...
- Reactjs 入门基础(三)
State 和 Props以下实例演示了如何在应用中组合使用 state 和 props .我们可以在父组件中设置 state, 并通过在子组件上使用 props 将其传递到子组件上.在 render ...
- 2015.4.10-C#入门基础(三)
今天,我们聊一聊一些基本问题: 1.修饰符有哪些?有什么区别呢? 首先大家想到的应该是 public:特点是所属类的成员和非所属类的成员都可以访问 private:只有所属类的成员才可以访问 prot ...
- Springmvc入门基础(三) ---与mybatis框架整合
1.创建数据库springmvc及表items,且插入一些数据 DROP TABLE IF EXISTS `items`; CREATE TABLE `items` ( `id` int(11) NO ...
- PHP基础入门(三)---PHP函数基础
PHP基础入门(三)---函数 今天来给大家分享一下PHP的函数基础.有了前两章的了解,想必大家对PHP有了一定的基础了解.想回顾前两章的朋友可以点击"PHP基础入门(一)"&qu ...
- MyBatis基础入门《三》Select查询集合
MyBatis基础入门<三>Select查询集合 描述: 代码新增了一个MybatisUtil工具类,查询数据库返回集合的时候,接收数据的三种方式.由于代码会渐渐增多,未涉及改动过的文件不 ...
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
随机推荐
- SparkContext的初始化(季篇)——测量系统、ContextCleaner及环境更新
<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...
- 王爽-汇编语言-综合研究四-不使用main函数编程
(一) 研究目的 使用C语言编程,我们一定要使用main函数么? (二) 研究过程 1) 最初的程序 首先,我们编写一个不写main函数的C语言程序. 程序如下: 在编译的过程中,没有发现错误.在链接 ...
- 前端开发面试知识点大纲--摘自jackyWHJ
前端开发面试知识点大纲:HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应 Ja ...
- jquery中是否加()的问题
自己总结的,慢慢修改再: 1带上()代表立即执行 去掉()代表当有事件发生的时候,我再执行
- RestController 和Controller的区别
restful风格,restcontroller与controller 初步接触springmvc的时候,被要求使用restful风格,彼时一头雾水,不懂何谓restful,参阅了很多资料,慢慢的接触 ...
- IOS学习笔记 O2
第二章 Objective-C语言基础进阶 一.Objective-C语言写法简化 利用@property快速生成setget方法 1.首先来复习一下setget写法,这是上一节笔记写的setget方 ...
- g++编译选项
-g,生成供调试用的可执行文件,可以在gdb中运行.由于文件中包含了调试信息因此运行效率很低,且文件也大不少. -c:生成名为source_file.o的目标文件. -o, 指定输出文件名,可以配合以 ...
- iOS原生地图开发指南续——大头针与自定义标注
iOS原生地图开发指南续——大头针与自定义标注 出自:http://www.sxt.cn/info-6042-u-7372.html 在上一篇博客中http://my.oschina.net/u/23 ...
- Web大文件下载控件(down2)-示例更新-Xproer.HttpDownloader
版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/down2/i ...
- python数据挖掘领域工具包
原文:http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块:Numpy和Sc ...