目录

  • 目录
  • 前言
  • 类的成员
    • 静态成员
    • 成员常量
    • 属性
    • 实例构造函数
    • 静态构造函数
    • 对象初始化列表
    • 析构函数
    • Dispose函数
    • 本地常量
    • 成员常量
    • readonly修饰符
    • this关键字
    • 索引
    • 访问器修饰符
    • 分部类和分部类型
    • 分部方法

前言

我所看的书籍,C#图解教程第四版有一些老了,现在C#的最新版本是7,但是这本书挺好的,官网有关于每一个版本更新的要点,https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/index
C#4之后增加的是一些更加高级的功能,以后再慢慢了解吧

类的成员

类的成员按照本质来分,有数据成员和函数成员

  • 字段
  • 常量
  • 方法
  • 属性
  • 构造函数
  • 析构函数
  • 运算符
  • 索引
  • 事件

静态成员

  • 可以声明为static的类成员如下所示

    • 字段
    • 方法
    • 属性
    • 构造函数
    • 运算符
    • 事件
  • 他们有下面这些性质:

    1. 静态成员即使没有类的实例也存在 . 如果静态字段有初始化语句,那么该字段在类的任 何静态成员被使用之前初始化,但没必要在程序执行的开始就初始化.
    2. 静态成员被所有实例共享
    3. 静态函数可以访问静态字段,但是不能访问实例成员
    4. 实例成员可以像访问实例成员那样访问静态成员

成员常量

  1. 成员常量使用修饰符const
  2. 他在编译期被替换,并没有自己的存储位置
  3. 他表现的十分像静态字段,即使没有实例,也可以用类名+点+成员常量名字来访问

属性

  1. 属性是函数成员,拥有set,get两个方法体,但是表现的像字段
  2. 他没有存储空间
  3. set方法隐式有一个value参数,和属性类型相同
  4. 唯一的必须要求是get方法必须要返回一个数据
  5. set与get很随意,可以对关联字段传进传出,也可以执行任何计算
  6. 属性可以设置成静态
  7. 可以只有set或只有get,变成只读属性或者只写属性,必须要有一个进行设定
  8. 有自动实现属性的方法,编译器会隐式创建后备字段和其关联,但是set,get不能有方法体,以分号结尾。
  9. 不能显式的调用访问器
  10. 可以像字段那样,直接引用属性名称

实例构造函数

  1. 如果没有构造函数,系统会默认有一个无参构造函数,没有方法体
  2. 构造函数可以重载,只要参数列表不同
  3. 如果自己为类声明了构造函数,那么系统就不会再提供默认无参构造函数
  4. 我们可以使用构造函数方法体
  5. 我们可以给实例构造函数指派访问修饰符,如public,private等,如果是private,则只能在类内部使用该函数。

静态构造函数

  1. 静态字段通常在静态构造函数中进行初始化
  2. 或者在静态构造函数中初始化
  3. 静态构造函数不能有访问修饰符
  4. 类只能有一个静态构造函数,不能有参数
  5. 不能在程序中显式调用静态构造函数,他们会被系统自动调用
    1. 在类的任何实例被创建之前
    2. 在类的任何静态成员被引用之前

对象初始化列表

  1. 他只是扩展了创建语法
  2. 允许在创建新对象实例时,设置字段和属性的值
  3. 有两种形式
  4. 初始化发生在构造函数的执行之后,因此会产生不同的值
  5. 设置的属性和字段必须是可访问的
Myclass ins=new Myclass{FieldOrProp=InitExpr }
Myclass ins=new Myclass(ArgList){FieldOrProp=InitExpr}

析构函数

  1. 这个函数是用来清理资源的
  2. 当你觉得自己的程序需要析构函数,你就必须为系统提供他
  3. 析构函数不能被显式调用,他是被系统在某个不确定的时间点调用,在垃圾收集过程中。
  4. 每个类只能有一个析构函数
  5. 析构函数不能有参数,不能有修饰符,名称和普通函数一样,但是多一个‘~’
  6. 析构函数只对实例起作用,所以没有静态形式

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#学习笔记第一篇——类进阶相关推荐

  1. 《鸟哥的Linux私房菜》个人学习笔记-第一篇

    <鸟哥的Linux私房菜>个人学习笔记-基础篇 这是一篇一个linux菜鸡自学的笔记 csdn上的各位大手子们好,本人实习生一枚最近想自己深入学习下linux,所以在社区里发博客,希望能记 ...

  2. bootloader学习笔记---第一篇以stm32为例

    目录 一.bootloader的任务 二.bootloader开发的基础知识 段的概念 重定位的概念 散列文件的概念 异常向量(待补充) 三.最简单的bootloader程序 四.使用汇编跳转 五.备 ...

  3. 编程学习笔记(第一篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(1)...

    软件工程的课程,对于从事大中型的软件开发是至关重要的一门课程. <面向对象技术高级课程>深入.系统.完整地讲解当今主流的面向对象软件开发方法的分析.设计.实现及重构方法,深入讲解UML语言 ...

  4. Cocos Studio学习笔记第一篇--界面

    大前天也就是周二被人问道:"对Cocos Studio2.0以后版本用法的了解."当时我一时之间没法回答,因为Cocos Studio1.6我以前用过很长时间,2.0改版以后我知道 ...

  5. php百分比乘加,PHP学习笔记第一篇 基础知识

    基础知识 我将php语言学习里面最最基础的部分,需要第一个学的,必须牢牢掌握的,归类到一起. 大纲 1.数据类型 2.变量 3.常量 4.操作符 5.流程控制 6.数组 7.字符串操作 8.正则 基础 ...

  6. python 学习笔记第一篇---下载网页内所有图片

    第一步:打开网址,进入开发者模式,选中 Network,选择 Img 然后刷新页面,静静等待页面加载 等待页面加载完成,你可以看到这边有很多图片的资源 随便点开一个图片选择 Headers 可以看到 ...

  7. 网络安全应急演练学习笔记第一篇之总则、分类及方法、组织机构

    文章目录 0x01 应急演练总则 1.1 应急演练定义 1.2 应急响应目的 1.3 应急演练原则 0x02 应急演练分类及方法 2.1 应急演练分类 2.2 应急演练方法 2.3 按目的与作用划分 ...

  8. MySQL学习笔记-第一篇-基础知识与命令

    目录 1 登录命令 1.1 主机域名登录 1.2 主机ip登录 2 库命令 2.1 显示库 2.2 创建数据库 2.3 删除数据库 2.4 MySQL-8.新特性 3 表命令 3.1 创建数据表 3. ...

  9. 华为HCIA-Datacom 学习笔记-------第一篇

    文章目录 一.前言 二.华为设备图标简介 三.通信与网络 1.网络通信基本概念 2.信息传递过程 3.常见术语 4.数据通信网络基本概念 5.网络设备 四.网络类型与网络拓扑 1.局域网.城域网.广域 ...

  10. es检索学习笔记第一篇

    文章目录 概念 倒排索引 分词器ik 创建mapping 查看索引,修改,删除 添加文档,查看文档,修改文档,查看文档 RestClient 一.映射分析 二.使用client创建索引等 创建Rest ...

最新文章

  1. 安装python,如果让升级版本的话
  2. Atom介绍和安装步骤
  3. 程序员的快速开发框架:Github上 10 大优秀的开源后台控制面板
  4. Nginx教程系列四:实现反向代理配置
  5. HDU 6741 MUV LUV UNLIMITED (博弈论)
  6. 【二分】Distinct
  7. mysql并发量是多少_如何为 MySQL 选择 CPU?
  8. Asp.Net中OnClientClick与OnClick之我见
  9. SQL Server 数据库备份与还原
  10. PMP学习系列2:PMP报名考试相关细则
  11. 权限管理系统,可以这么设计
  12. 小米路由器登陆以及切换wan账户脚本
  13. matlab 双均线,双均线策略
  14. java制作纯字rpg小游戏_初学JAVA时编写的rpg文字游戏
  15. Airbnb放弃国内业务,转投外国怀抱?翅膀硬了吗?
  16. android m壁纸驱动之家,微软打造的良心壁纸App,仅4.2M
  17. Html img显示图片的三种方式
  18. 用python写注册登录界面web_用Python实现web端用户登录和注册功能
  19. Intel SGX入门教程(二)在windows环境搭建intel sgx环境并运行helloworld程序
  20. “一对一直播软件”的开发,离不开直播源码开发+系统搭建

热门文章

  1. Java — Arrays.toString(string[]) + Enumeration.hasMoreElements()【Arrays类、Enumeration接口】
  2. 1017 A除以B (20 分)—PAT (Basic Level) Practice (中文)
  3. Android调试wifi使用wpa_supplicant和wpa_cli总结
  4. Azkaban 安装
  5. 【习题 8-10 UVA - 1614】Hell on the Markets
  6. Mybatis学习随笔
  7. windows下使用Wireshark调试chrome浏览器的HTTP/2流量
  8. 【网络流24题】No.4 魔术球问题 (二分+最小路径覆盖)
  9. 上海著名网络公司招聘高级软件工程师
  10. java金额格式化 .00_Java中金额的格式化###,###.00