【基础知识】.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 ...
随机推荐
- ASP.NET中的另类控件
首先看一个aspx文件里的部分内容: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- Linuc学习3-输入和输出重定向
已打开的文件描述符在fork和exec调用后保留下来,我们可以利用对进程这方面知识点的理解来改变程序的行为. 这个例子涉及一个过滤程序:它从标准输入读取数据,然后向标准输出写数据,同时在输入和输出之间 ...
- 关于初次使用Linux的一些小经验
前些天看了一下腾讯的招聘的网站,发现大多数开发都要求在Linux系统下进行,所以就赶紧装了个Ubuntu来玩玩,可是装了以后才发现,初次接触Linux就跟小学生差不多,大部分操作都要通过命令行来完成, ...
- 天梯赛 L2-013. (并查集) 红色警报
题目链接 题目描述 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域 ...
- HTTP与HTTPS相关知识
URL的开头一般会有http或https,这是访问资源需要的协议类型.有时还会看到ftp.sftp.smb开头的URL,这些都是协议类型.一般使用得最多的还是http和https. HTTP HTTP ...
- AndroidManifest.xml权限设置
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permi ...
- linux下pip安装无法连接官网
为了安装pwntools等工具,要先安装pip,系统安装好了,却遇到了无法连接到pip官网的报错,找了半天方法最终解决 wget https://bootstrap.pypa.io/get-pip.p ...
- Pytorch数据变换(Transform)
实例化数据库的时候,有一个可选的参数可以对数据进行转换,满足大多神经网络的要求输入固定尺寸的图片,因此要对原图进行Rescale或者Crop操作,然后返回的数据需要转换成Tensor如: import ...
- Python模块:Random(未完待续)
本文基于Python 3.6.5的官文random编写. random模块简介 random为各种数学分布算法(distributions)实现了伪随机数生成器. 对于整数,是从一个范围中均匀选择(u ...
- Django 2.0.3安装-压缩包方式
OS:Windows 10家庭中文版,CPU:Intel Core i5-8250U Python版本:Python 2.7,Python 3.6 Django版本:2.0.3(最新2.0.5) 解压 ...