【基础知识】.Net基础加强 第二天
第02天 .Net基础加强
1、 封装
1> 属性的封装:
属性封装字段:把变化封装一下,保留用户的使用方式
2> 把方法的多个参数封装成一个对象
3> 将一堆代码封装到一个方法中
4> 将一些功能封装到几个类中
5> 将一些具有相同功能的代码封装到了一个程序集中(dll、exe),并且对外提供统一的访问接口。(属性名、方法名等。)
2、 继承(:表示继承)
1> Base Class à 基类 Parent Class à 父类
2> Derived Classà 派生类 Child Class à 子类
3> 好处:提高代码的重用性;多态
4> 继承的特性
a> 继承的单根性:只能继承一个父类
b> 继承的传递性:子类继承父类是同时继承了父类从他的父类中继承的属性、字段和方法
6> C#任何一个类都默认继承自Object类,如果一个类没有继承任何类,则默认继承Object类。如果继承了一个类,则将覆盖默认继承的Object类。
3、 继承中的构造函数▲
1> 继承的时候,构造函数不能被继承。
2> 子类的构造函数会默认去调用父类中的无参数的构造函数。
3> 如果父类中没有无参数的构造函数,子类继承父类时会报错的,解决方案:
方案一: 在父类中增加一个无参数的构造函数。这时子类的构造函数就可以找到父类中的无参构造函数了。
方案二: 不修改父类,而是在子类中的构造函数后面通过:base(),显示去调用父类的某个构造函数,而不去调用无参的构造函数。
4、 通过this调用构造函数
作用:
1> 在当前类的构造函数后面通过:this()来调用当前类自己的其他构造函数。
public Person(string name) : this(string name,0,0,null){}
5、 对象初始化器(语法糖)
Person p = new Person(){Name=”yzk”,Age=18,Email=”yzk365@qq.com”}
6、 集合初始化器
List<int> list = new List<int>(){10,20,30,40}
7、 通过this和base调用类的成员
在一般情况下,如果子类继承了父类的成员。那么在子类中,通过this.成员或base.成员都是访问的是一样的。
除非父类中的成员子类继承后又重写了。
8、 五种常用的访问修饰符
1> private:私有的,只能在当前类内部来使用
2> protected:受保护的,只能在当前类内部,以及所有当前类子类的内部。
3> internal:只能在当前程序集内部访问,跨程序集是不能访问的
4> protected internal:相当于同时具有protected和internal的权限。可以在当前程序集或子类中(不同程序集也可以访问)访问。
5> public:任何地方都能访问
6> protected和internal没有可比性。protected是当前类内部与所有子类内吧可访问,而internal是在同一个程序集中可访问。 假如不在一个程序集中,但是依然存在继承关系,那么protected访问修饰符修饰类型依然可以访问。
9、 关于父类中私有成员的继承问题
(私有字段到底是有没有继承,这是一个有很大分歧的问题!!)
我认为子类并不能继承父类的私有属性和字段
10、 访问级别的约束(类的访问修饰符只有两种,一种是public 另一种是internal。如果什么都不写,默认是internal)
1> 子类的访问级别不能比父类的高(如果比父类的访问级别高的话,会暴露父类的成员)
2> 方法的参数和返回值类型必须与方法本身的访问修饰符一致
3> 属性的访问级别和属性的类型的访问级别(类的访问修饰符和类属性或字段的访问修饰符都高于【参数】的访问修饰符)
以上三种用于解决访问级别不一致的错误
11、 通过虚方法(virtual修饰)实现多态
1> 虚方法,virtual:是虚方法的时候,那么这个方法的子类中就可以被重写(override)了.当子类继承父类后,可以直接使用该方法,也可以将该方法重写。
2> 子类如果要重写父类中的方法,则需要在子类的Show方法前加一个override关键字。 子类重写父类的方法必须并且只能用override关键字。 此时,如果在子类中用this来调用则调用的是子类重用后的Show方法,如果在子类中用base来调用,则调用的依旧是父类中的Show方法。
3> 虚方法可以给父类中的方法一个实现,比如ToString()方法
虚方法必须有实现部分,哪怕是空实现。
12、 多态(为了保护程序的可扩展性):多态就是多种表现形态。
1> 开放封闭原则(对修改封闭,对扩展开放)
2> 多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征。
3> 多态的作用:把不同的子类对象都当做父类来看,可以屏蔽不同子类对象之间存在的差异,写出通用代码,做出通用的编程,以适应需求的不断变化。
13、 静态成员-静态类 static
1> 调用静态方法的时候必须通过类名来直接调用,不能通过对象来调用。 也就是说,使用静态成员不需要实例化对象。
2> 静态成员会在整个应用程序退出时,才会释放资源,所以可以在整个应用程序中共享数据。
3> 静态类不能被实例化。不能被继承。
4> 由于静态成员会在整个程序退出时,才释放资源,所以尽量避免写静态字段和静态属性,最好只写静态方法。
5> 当给一个普通类添加静态字段后,系统会默认为该类生成静态构造函数【静态构造函数不能有访问修饰符、并且不能带参数】
6> 静态类的构造函数,只会在第一次使用静态类之前,执行,并且只会执行一次。 静态构造函数不能有访问修饰符,不能有参数。
7> 静态类不能多态。
8> 什么时候使用静态类和静态成员
a>什么情况下要将一个类标记为静态类
一般情况下是,当这个类是一个工具类,里面都是方法。为了让用户调用的时候方便,不需要实例化对象,这是可以给该类标记为static类(静态类),此时该类中只能包含静态成员不能包含实例成员。比如:Convert、Math、File、Console….
b>什么情况下需要在一个普通类中编写一个静态成员,而这个类不能标记为static
当这个类需要别实例化的时候,如果这个类中有一个成员是所有对象都共享的数据,这是可以 将该类中的成员标记为静态的,但是这个类还是一个实例类。
14、 静态类的补充—密封类 (sealed关键字)
1> 作用:
a> 不能被继承
b> 不能被重写
2> 是一个密封类,不能被继承
3> Sealed关键字,表示类不能被继承
4> 密封类表示不能别继承。String类。.Net系统中本身对字符串有很多特殊处理(为String开了很多“绿灯”,String有很多特权,比如:不可变性,字符串池等等…),防止别的类继承后照成混乱。商业问题。
5> 禁止子类重写父类的方法。
【基础知识】.Net基础加强 第二天的更多相关文章
- Linux基础知识与基础命令
Linux基础知识与基础命令 系统目录 Linux只有一个根目录,没有盘符的概念,文件目录是一个倒立的树形结构. 常用的目录功能 bin 与程序相关的文件 boot 与系统启动相关 cdrom 与Li ...
- java线程基础知识----线程基础知识
不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...
- day63:Linux:nginx基础知识&nginx基础模块
目录 1.nginx基础知识 1.1 什么是nginx 1.2 nginx应用场景 1.3 nginx组成结构 1.4 nginx安装部署 1.5 nginx目录结构 1.6 nginx配置文件 1. ...
- 这些C++基础知识的基础知识你都学会了吗?
一.C++基础知识 新的数据类型 C语言中的数据类型 C++中新的数据类型 思考:新的数据类型有什么好处?请看下面的代码: 可以见得:新的类型使整个程序更加简洁,程序变得易读易懂!这个就是bool ...
- Java基础知识二次学习-- 第二章 基础语法与递归补充
第二章 基础语法与递归补充 时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...
- Ceph基础知识和基础架构认识
1 Ceph基础介绍 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务.在虚拟化领域里,比较常用到的是Cep ...
- Ceph 基础知识和基础架构认识
1 Ceph基础介绍 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务.在虚拟化领域里,比较常用到的是Cep ...
- 算法导论 - 基础知识 - 算法基础(插入排序&归并排序)
在<算法导论>一书中,插入排序作为一个例子是第一个出现在该书中的算法. 插入排序: 对于少量元素的排序,它是一个有效的算法. 插入排序的工作方式像许多人排序一手扑克牌.开始时,我们手中牌为 ...
- 集合框架基础知识-----java基础知识
Java集合框架 :接口:Collection.List .Set. Map:实现类:ArrayList.LinkedList.Vector.HashSet.TreeSet.HashMap.HashT ...
- web前端基础知识- Django基础
上面我们已经知道Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Sessi ...
随机推荐
- AspNetPager控件的最基本用法
AspNetPager控件是一个基于.net的第三方免费开源控件,具有开发高效.使用方便.功能完整等优点.它弥补了GridView内置分页以及PageDatasource类辅助分页的不足,将分页数据逻 ...
- noip2012 P1081 开车旅行
小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为Hi,城市 i 和城市 j ...
- Kissy && Require
KISSY add(name?,factory?,deps) 函数挂载在全局对象KISSY上,用来定义模块. 一个 JS 文件包含一个add()(这时路径+文件名可以用作模块名),如果一个文件包 ...
- 《区块链100问》第78集:EOS是什么?
EOS是一个区块链开发平台,具有可扩展性强.支持大规模商业应用等特点. 首先,EOS采取DPoS共识算法及其他技术手段预期实现每秒百万级别交易请求,将能够支持数千个商业级的DAPPs. 以太坊是一条公 ...
- Java编程思想 4th 第3章 操作符
有了数据,还需要进行数据间的运算,因此Java中也有数据间运算的各种符号,书本称之为操作符,正确的翻译应该是运算符. Java中的运算符同C++相同,运算符同运算符对象构成表达式,表达式是运算对象及运 ...
- 数据库-mysql事务
MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...
- js权威指南---学习笔记01
1.当函数赋值给对象的属性时,就变为了方法:2.被零整除不报错,只会返回无穷大(Infinity)或者负无穷大.例外:零除以零等于非数字(NaN).3.NaN与任何值都不相等! 4.Javascrip ...
- Linux入门(一)root密码设置和用户切换
从这学期开始,本人将会亲自开一个Linux 专题学习包括Linux 常用命令,常见问题的一些解决方法,以及Linux系统下C和C++一些学习经验 下面这张图片是首次安装Ubuntu后第一次设置root ...
- Luogu P1566 【加等式】
看到这道题,我们首先注意到“找出其所有的加等式的个数”,自然地考虑运用计数DP求出若干数相加的和的个数 考虑将每个元素排序后DP处理若干数相加的和的个数 用f[i]表示 对于一个数a[i],对于前i- ...
- Git missing in VS Code – No source control providers
解决办法:管理->设置->搜索[git.enabled]和[git.path],分别设置下即可. 注意"git.enabled: true",只设置git.path是不 ...