C#学习笔记第一篇——类进阶
目录
- 目录
- 前言
- 类的成员
- 静态成员
- 成员常量
- 属性
- 实例构造函数
- 静态构造函数
- 对象初始化列表
- 析构函数
- Dispose函数
- 本地常量
- 成员常量
- readonly修饰符
- this关键字
- 索引
- 访问器修饰符
- 分部类和分部类型
- 分部方法
前言
我所看的书籍,C#图解教程第四版有一些老了,现在C#的最新版本是7,但是这本书挺好的,官网有关于每一个版本更新的要点,https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/index
C#4之后增加的是一些更加高级的功能,以后再慢慢了解吧
类的成员
类的成员按照本质来分,有数据成员和函数成员
- 字段
- 常量
- 方法
- 属性
- 构造函数
- 析构函数
- 运算符
- 索引
- 事件
静态成员
- 可以声明为static的类成员如下所示
- 字段
- 方法
- 属性
- 构造函数
- 运算符
- 事件
他们有下面这些性质:
- 静态成员即使没有类的实例也存在 . 如果静态字段有初始化语句,那么该字段在类的任 何静态成员被使用之前初始化,但没必要在程序执行的开始就初始化.
- 静态成员被所有实例共享
- 静态函数可以访问静态字段,但是不能访问实例成员
- 实例成员可以像访问实例成员那样访问静态成员
成员常量
- 成员常量使用修饰符const
- 他在编译期被替换,并没有自己的存储位置
- 他表现的十分像静态字段,即使没有实例,也可以用类名+点+成员常量名字来访问
属性
- 属性是函数成员,拥有set,get两个方法体,但是表现的像字段
- 他没有存储空间
- set方法隐式有一个value参数,和属性类型相同
- 唯一的必须要求是get方法必须要返回一个数据
- set与get很随意,可以对关联字段传进传出,也可以执行任何计算
- 属性可以设置成静态
- 可以只有set或只有get,变成只读属性或者只写属性,必须要有一个进行设定
- 有自动实现属性的方法,编译器会隐式创建后备字段和其关联,但是set,get不能有方法体,以分号结尾。
- 不能显式的调用访问器
- 可以像字段那样,直接引用属性名称
实例构造函数
- 如果没有构造函数,系统会默认有一个无参构造函数,没有方法体
- 构造函数可以重载,只要参数列表不同
- 如果自己为类声明了构造函数,那么系统就不会再提供默认无参构造函数
- 我们可以使用构造函数方法体
- 我们可以给实例构造函数指派访问修饰符,如public,private等,如果是private,则只能在类内部使用该函数。
静态构造函数
- 静态字段通常在静态构造函数中进行初始化
- 或者在静态构造函数中初始化
- 静态构造函数不能有访问修饰符
- 类只能有一个静态构造函数,不能有参数
- 不能在程序中显式调用静态构造函数,他们会被系统自动调用
- 在类的任何实例被创建之前
- 在类的任何静态成员被引用之前
对象初始化列表
- 他只是扩展了创建语法
- 允许在创建新对象实例时,设置字段和属性的值
- 有两种形式
- 初始化发生在构造函数的执行之后,因此会产生不同的值
- 设置的属性和字段必须是可访问的
Myclass ins=new Myclass{FieldOrProp=InitExpr }
Myclass ins=new Myclass(ArgList){FieldOrProp=InitExpr}
析构函数
- 这个函数是用来清理资源的
- 当你觉得自己的程序需要析构函数,你就必须为系统提供他
- 析构函数不能被显式调用,他是被系统在某个不确定的时间点调用,在垃圾收集过程中。
- 每个类只能有一个析构函数
- 析构函数不能有参数,不能有修饰符,名称和普通函数一样,但是多一个‘~’
- 析构函数只对实例起作用,所以没有静态形式
Dispose函数
- 如果想要显式清理资源,就要实现一个IDisposable的接口,把清理资源的代码封装在一个void的无参数方法中,叫做dispose
- 一些指导方针
- 如果dispose已经清理过了,就调用GC.SuppressFinalize 告诉CLR不要再调用析构函数
- 如果某种原因dispose没有清理,就要析构函数来清理
- dispose函数应该属于就算被多次调用也不能出现问题
本地常量
- 常量在声明中必须初始化
- 常量在声明后不能改变
- 在类型之前增加关键字const
- 必须有初始化语句,初始化值必须在编译期决定
- 值可以是null引用或者预定义简单类型的数据或者表达式,不能是引用类型,因为对象的引用在运行时确定的
- 声明在方法体里面
成员常量
- 成员常量和本地常量差不多
- 只是声明在类声明里面
readonly修饰符
- 他的作用和const差不多,但是有稍微不同
- 他可以在声明时就初始化,也可以在类的任何构造函数中进行初始化
- 他在内存中有存储位置
- 他不用在编译期就确定,可以在运行期就确定
class Shape
{ readonly double PI=3.1416;readonly int NumberOfSides;public Shape(double side1, double side2){NumberOfSides =4;//在构造函数中确定}public Shape(double side1, double side2,double side3){NumberOfSides =3;//在构造函数中确定}
}
this关键字
- this关键字只能用在下面这些类成员的代码块中
- 实例构造函数
- 实例方法
- 属性或索引的实例访问器
索引
- 索引和属性差不多一样,都有set和get
- 不用分配内存来存储
- 他们都被用来访问其他数据成员,这些成员和它们关联,为这些成员提供设置和获取访问
- 属性表示单独的数据成员
- 索引表示多个数据成员
- 索引可以只有一个访问器,也可以两个都有
- 索引总是实例成员,不能被声明为static
- 和属性一样,set与get访问器可以什么都不做,只要get访问器返回某个指定类型的值即可
- 声明语句
string this [ int index]{}
- 参数列表在方括号中间
- 参数列表至少必须声明一个参数
- 索引没有名称,在名称的位置关键字this
- 索引可以重载,由于名称都是this,所以参数列表必须不一样
访问器修饰符
- 访问器修饰符有很多限制,如下:
- 只有两个访问器都存在的情况下,才可以有修饰符
- 修饰符只能有一个
- 修饰符的等级不能比成员的等级高
- 没有修饰符的访问器继承成员的修饰符
分部类和分部类型
- 类的声明可以被分割成几个分部类的声明
- 每个分部类的声明都含有一些类成员的声明
- 类的分部类声明可以在同一文件中,也可以不在同一文件中
- 局部声明需要被标记
partial class
- partial 是上下文关键字
- 分部类需要在一起进行编译,并且具有相同的含义,如同所有类成员被声明在一个单独的类声明体内
分部方法
- 定义声明和实现声明的签名必须相同
- 定义声明和实现声明在不同的分部类
- 方法返回值为void、不能有修饰符,为隐式私有
- 参数列表不能包含out参数
- 可以有定义部分而没有实现部分,那么对该方法的任何调用将全部删除
C#学习笔记第一篇——类进阶相关推荐
- 《鸟哥的Linux私房菜》个人学习笔记-第一篇
<鸟哥的Linux私房菜>个人学习笔记-基础篇 这是一篇一个linux菜鸡自学的笔记 csdn上的各位大手子们好,本人实习生一枚最近想自己深入学习下linux,所以在社区里发博客,希望能记 ...
- bootloader学习笔记---第一篇以stm32为例
目录 一.bootloader的任务 二.bootloader开发的基础知识 段的概念 重定位的概念 散列文件的概念 异常向量(待补充) 三.最简单的bootloader程序 四.使用汇编跳转 五.备 ...
- 编程学习笔记(第一篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(1)...
软件工程的课程,对于从事大中型的软件开发是至关重要的一门课程. <面向对象技术高级课程>深入.系统.完整地讲解当今主流的面向对象软件开发方法的分析.设计.实现及重构方法,深入讲解UML语言 ...
- Cocos Studio学习笔记第一篇--界面
大前天也就是周二被人问道:"对Cocos Studio2.0以后版本用法的了解."当时我一时之间没法回答,因为Cocos Studio1.6我以前用过很长时间,2.0改版以后我知道 ...
- php百分比乘加,PHP学习笔记第一篇 基础知识
基础知识 我将php语言学习里面最最基础的部分,需要第一个学的,必须牢牢掌握的,归类到一起. 大纲 1.数据类型 2.变量 3.常量 4.操作符 5.流程控制 6.数组 7.字符串操作 8.正则 基础 ...
- python 学习笔记第一篇---下载网页内所有图片
第一步:打开网址,进入开发者模式,选中 Network,选择 Img 然后刷新页面,静静等待页面加载 等待页面加载完成,你可以看到这边有很多图片的资源 随便点开一个图片选择 Headers 可以看到 ...
- 网络安全应急演练学习笔记第一篇之总则、分类及方法、组织机构
文章目录 0x01 应急演练总则 1.1 应急演练定义 1.2 应急响应目的 1.3 应急演练原则 0x02 应急演练分类及方法 2.1 应急演练分类 2.2 应急演练方法 2.3 按目的与作用划分 ...
- MySQL学习笔记-第一篇-基础知识与命令
目录 1 登录命令 1.1 主机域名登录 1.2 主机ip登录 2 库命令 2.1 显示库 2.2 创建数据库 2.3 删除数据库 2.4 MySQL-8.新特性 3 表命令 3.1 创建数据表 3. ...
- 华为HCIA-Datacom 学习笔记-------第一篇
文章目录 一.前言 二.华为设备图标简介 三.通信与网络 1.网络通信基本概念 2.信息传递过程 3.常见术语 4.数据通信网络基本概念 5.网络设备 四.网络类型与网络拓扑 1.局域网.城域网.广域 ...
- es检索学习笔记第一篇
文章目录 概念 倒排索引 分词器ik 创建mapping 查看索引,修改,删除 添加文档,查看文档,修改文档,查看文档 RestClient 一.映射分析 二.使用client创建索引等 创建Rest ...
最新文章
- 安装python,如果让升级版本的话
- Atom介绍和安装步骤
- 程序员的快速开发框架:Github上 10 大优秀的开源后台控制面板
- Nginx教程系列四:实现反向代理配置
- HDU 6741 MUV LUV UNLIMITED (博弈论)
- 【二分】Distinct
- mysql并发量是多少_如何为 MySQL 选择 CPU?
- Asp.Net中OnClientClick与OnClick之我见
- SQL Server 数据库备份与还原
- PMP学习系列2:PMP报名考试相关细则
- 权限管理系统,可以这么设计
- 小米路由器登陆以及切换wan账户脚本
- matlab 双均线,双均线策略
- java制作纯字rpg小游戏_初学JAVA时编写的rpg文字游戏
- Airbnb放弃国内业务,转投外国怀抱?翅膀硬了吗?
- android m壁纸驱动之家,微软打造的良心壁纸App,仅4.2M
- Html img显示图片的三种方式
- 用python写注册登录界面web_用Python实现web端用户登录和注册功能
- Intel SGX入门教程(二)在windows环境搭建intel sgx环境并运行helloworld程序
- “一对一直播软件”的开发,离不开直播源码开发+系统搭建
热门文章
- Java — Arrays.toString(string[]) + Enumeration.hasMoreElements()【Arrays类、Enumeration接口】
- 1017 A除以B (20 分)—PAT (Basic Level) Practice (中文)
- Android调试wifi使用wpa_supplicant和wpa_cli总结
- Azkaban 安装
- 【习题 8-10 UVA - 1614】Hell on the Markets
- Mybatis学习随笔
- windows下使用Wireshark调试chrome浏览器的HTTP/2流量
- 【网络流24题】No.4 魔术球问题 (二分+最小路径覆盖)
- 上海著名网络公司招聘高级软件工程师
- java金额格式化 .00_Java中金额的格式化###,###.00