NET CLR via C#读书笔记 - 第八章 方法

NET CLR via C#高清中文版 (第4版) 针对 CLR和.NET Framework 4.5进行深入、全面的探讨, 并结合实例介绍了如何利用它们进行设计、开发和调 试。全书5部分共29章。第Ⅰ部分介绍CLR基础,第Ⅱ 部分解释如何设计类型,第Ⅲ部分介绍基本类型,第 Ⅳ部分以核心机制为主题,第Ⅴ部分重点介绍线程处 理。 通过本书的阅读,读者可以掌握CLR和.NET Framework的精髓,轻松、高效地创建高性能应用程序。 立即下载

1 实例构造器与引用类型(类)

  ① 构造器是将类型实例初始化为良好状态的特殊方法。
  ② 元数据表中名字为.ctor
  ③ 创建引用类型时,首先为实例的数据字段分配内存并将分配的内存字节初始化为0,其次初始化附加字段(类型对象指针和同步块索引),最后调用实例构造器初始化数据字段来设置对象的初始状态。
  ④ 实例构造器无法被继承,无法使用abstract,sealed,virtual等修饰符修饰。
  ⑤ 类没有定义实例构造器,C#编译器会默认创建一个实例构造器,默认的实例构造器不会执行任何操作。
  ⑥ 类的实例构造器默认为public,如果类由abstract修饰,则实例构造器的可访问性为protected。静态类不会生成默认的实例构造器。
  ⑦ 可定义多个实例构造器,只要每个实例构造器的方法签名不同即可。
  ⑧ 使用内联初始化时要注意代码膨胀效应。

2 实例构造器和值类型(结构)

  ① C#编译器不会为值类型生成默认实例构造器。
  ② 值类型的字段总是被初始化为0或者null。
  ③ 不能在值类型中使用内联初始化。

3 类型构造器

  ① 类型构造器又叫静态构造器,用于设置类型的初始状态。
  ② 类型构造器最多只能实现一个,可以不实现,且类型构造器永远没有参数。
  ③ 类型构造器在C#中可在值类型和引用类型中定义,必须由static修饰,代码如下:

//引用类型的类型构造器形式
internal sealed class classdemo{
	static classdemo(){}
}

//值类型的类型构造器形式
internal struct structdemo{
	static structdemo(){}
}

  ④ 类型构造器总是private的,且程序员不能显示修饰为private,由C#编译器来进行默认处理。
  ⑤ 类型构造器的调用过程比较麻烦,需要记住的一点就是线程同步问题,类型构造器只会调用一次。这些工作都由CLR完成,程序员无需关心。
  ⑥ 类型构造器只能访问类型的静态字段。

4 操作符重载方法

  ① 部分语言允许类型定义操作符应该如何操作类型实例,但是CLR本身是对操作符一无所知,CLR只是定义了编程语言公开操作符的方法,在CLR眼里,操作符也只是一个方法而已。操作符的含义由编程语言定义,以及当操作符出现时应当生成怎样的代码。
  ② 操作符重载函数必须是public和static。
  ③ C#允许重载的一元和二元操作符如下:
            一元操作符一元操作符
            二元操作符在这里插入图片描述
  ⑤ 操作符重载代码演示如下:

public sealed class complex{
	public static complex operator+(complex c1 , complex c2){}
}

5 转换操作符方法

5.1 转换操作符方法描述

  ① 用于一种类型转换为另一种类型的方法,C#编译器知道如何生成基元类型间的转换。
  ② 转换构造器和转换操作符方法定义代码如下:

using System;
public sealed class Demo{
	//转换构造器  只有一个参数 且参数要求为待转换源类型的实例
	public Demo(Int32 i){}  //由一个Int32构造一个Demo
	public Demo(Single s){} //由一个Single构造一个Demo
	
	//转换方法 没有参数 
	public Int32 ToInt32(){}	//将一个Demo转化为Int32
	public Single ToSingle(){}  //将一个Demo转化为Single 
}

5.2 转换操作符方法重载

  ① 将5.1中代码部分进行扩展,来演示装换操作符重载:

using System;
public sealed class Demo{
	//转换构造器  只有一个参数 且参数要求为待转换源类型的实例
	public Demo(Int32 i){}  //由一个Int32构造一个Demo
	public Demo(Single s){} //由一个Single构造一个Demo
	
	//转换方法 没有参数 
	public Int32 ToInt32(){}	//将一个Demo转化为Int32
	public Single ToSingle(){}  //将一个Demo转化为Single 

	//转换操作符方法重载
	//由Int32类型隐式构造并返回一个Demo
	public static implicit operator Demo(Int32 i){
		return new Demo(i);
	}
	
	//由Single类型隐式构造并返回一个Demo
	public static implicit operator Demo(Single s){
		return new Demo(s);
	}

	//由demo类型返回一个Int32
	public static explicit operator Int32(Demo d){
		return d.ToInt32();
	}

	//由demo类型返回一个Single
	public static explicit operator Single(Demo d){
		return d.ToSingle();
	}
}

  说明:implicit告诉编译器不需要生成代码来显示转换,explicit只有发生了显示转型时才调用代码。

6 扩展方法

  ① 扩展方法运行定义一个静态方法并使用实例方法的语法进行调用,使用this进行标注。
  ② 扩展方法的代码示例如下:

public static class ExDemo{
	public static void Demo(this int i,char c){}
}

  ③ 结合上述代码示例,说明扩展方法的一些使用规则和相关原则:
  第一,C#只支持扩展方法,不支持扩展字段,扩展事件,扩展属性,扩展操作符等。
  第二,必须在非范型的静态类中声明,有且只有包含一个用this修饰的参数。
  第三,必须具有文件作用域,不能是嵌套类。
  第四,C#编译器要求导入扩展方法,以提高编译效率
  第五,多个不同的静态类可以定义相同的静态方法,如果存在两个满足匹配的扩展方法,编译器会报错,此时要么修改源代码解决冲突,要么显示调用静态方法的方式调用(不能再用实例方法的调用方式进行调用)
  第六,如果使用扩展方法扩展了一个基类,那么相应的派生类也都会被扩展,所以不要将System.Object作为this修饰的参数。
  第七,版本控制,一开始由于不支持某一功能而实现了扩展方法,后续版本更新中,增加了相应的实例方法,此时会导致前后行为差异,可能会引发相关问题。
  扩展方法还可扩展各种类型,接口,枚举,委托等都可以进行扩展,具体描述请查阅《NET CLR via C# 第四版》 第八章内容。

7 分部方法

  ① 分部方法的应用场景:想定制类型的某些行为,但是又不想通过继承和虚函数的方式去实现。
  ② 分部方法的规则和原则:
  第一,只能在分部类和分部结构中声明。
  第二,返回值只能是void,无法使用out修饰符,但可以有ref参数,可以是范型方法,可以是实例或者静态方法,也可以标记为unsafe。
  第三,分部方法的声明和实现需要具有完全一致的签名。
  第四,如果分部方法没有实现,那不不能创建委托来引用该分部方法。没有实现分部方法,C#编译器不会生成现任何分部方法相关的元数据。
  第五,总是private,禁止程序员显示指定为private。

  以上内容为对《NET CLR via C#(第四版)》第八章内容的阅读笔记,只记录其中核心部分内容,书中对以上主题还进行详细的代码演示说明,如需要详细阅读请自行查阅本书第八章内容,感谢您的阅读。

.NET CLR via C#(第4版) 最新完整版 高清文字版 是第4版 正式版 不是prepress版。 本书是全球享有盛誉的技术作家Jeffrey Richter的经典书籍CLR via C#最新版第四版。 本书针对clr、C#5.0和.net framework 4.5进行深入、全面的探讨,并结合实例介绍了如何利用它们进行设计、开发和调试。 本书深入、全面探讨.NET Framework、CRL和多核编程,广泛讨论FrameworkClassLibrary(FCL)核心类型,对泛型和线程处理等深奥 难懂的开发概念提供权威、实用的指导。 立即下载

相关推荐

NET CLR via C#(第4版)中文版(百度网盘链接地址)

NET CLR via C#(第4版)中文版(百度网盘链接地址)

NET CLR via C#读书笔记 - 第一章 CLR执行模型

NET CLR via C#读书笔记 - CLR执行模型CLR执行模型1.1 CLR简介1.2 CLR执行模型1.2.1 将源代码编译成托管模块 CLR执行模型 1.1 CLR简介 CLR(Common Language Runtime(公共语言运行时))可以简单理解为是一个支持多种编程语言及多语言互操作,完整的高级虚拟机。   程序在运行的时候有着惊人数量的运行时依赖。每个有用的程序都需要某些运行时函数库,以便其能跟电脑的其它资源(如用户输入设备,磁盘文件,网络通信等)交互,同时程序也需要转换成计算机硬

CreateNewWorld的博客 471

NET CLR via C#(中文第4版)-完整版-5

CLR via C# (中文第4版) 完整版-第四卷,共5卷,请在点击上传作者账户资源进行完整下载(csdn最大只能传70MB的文件)

NET CLR via C#读书笔记 - 第十二章 泛型

NET CLR via C#读书笔记 - 第十二章 泛型1 泛型简介2 开放类型和封闭类型3 泛型类型和继承4 泛型类型同一性5 可验证性和约束5.1 主要约束5.2 次要约束5.3 构造器约束5.4 泛型类型变量转型5.5 泛型类型变量设为默认值5.5 泛型类型变量与null比较5.6 两个泛型变量作比较5.7 不要将泛型类型变量作为操作数使用 1 泛型简介   泛型是另一种形式的“代码重用”,或者说“算法重用”。开发者可以定义好算法,排序,搜索,交换等,但是这些算法的数据类型却不会事先指定,而是由使用者

CreateNewWorld的博客 309

【强化学习】11 —— Double DQN算法与Dueling DQN算法

可以看到由于数据点的分布,使得拟合出的价值函数无法与真实的价值函数吻合,甚至在部分区域产生了明显的偏差。Dueling DQN 是 DQN 另一种的改进算法,它在传统 DQN 的基础上只进行了微小的改动,但却能大幅提升 DQN 的表现。这样,即使其中一套神经网络的某个动作存在比较严重的过高估计问题,由于另一套神经网络的存在,这个动作最终使用的值不会存在很大的过高估计问题。.在同一个状态下,所有动作的优势值之和为 0,因为所有动作的动作价值的期望就是这个状态的状态价值。环境的状态包括倒立摆角度的正弦值。

sinat_52032317的博客 1万+

第1章:Zephyr 开发环境搭建与 Hello World

📝【摘要】本文是Zephyr RTOS开发入门指南的第一章,详细介绍了从环境搭建到首个应用运行的完整流程。主要内容包括:1️⃣ Zephyr项目结构解析与west工具链部署;2️⃣ 开发环境配置(Linux/WSL)及SDK安装;3️⃣ 两种实践路径——官方HelloWorld样例与自定义应用开发;4️⃣ 实际硬件部署方法(nRF/STM32)及常用west命令速查;5️⃣ 典型问题解决方案。通过qemu_x86模拟器演示了基础打印功能实现,为后续深度开发奠定基础。

hemoparrot的专栏 1361

《CLR via C#》读书笔记-.NET多线程(五)

使用ThreadPool的QueueUserWorkItem的相关介绍

郑林的专栏 1223

pip——【Fatal error in launcher: Unable to create process】的深度排查与修复指南

本文深度解析了Python包管理工具pip报错【Fatal error in launcher: Unable to create process】的根本原因与解决方案。该错误通常由Python解释器路径变更、虚拟环境损坏或多版本冲突导致。文章提供了从快速排查到彻底修复的完整指南,包括使用`python -m pip`命令绕过启动器、修复或重装pip、重建虚拟环境等核心方法,并给出了预防此错误的最佳实践。

weixin_29306261的博客 598

.NET:CLR via C# Thread Basics

A thread is a Windows concept whose job is to virtualize the CPU. Thread Overhead Thread kernel object The operating system allocates and initializes one of these data structures for each thread c...

weixin_34194317的博客 156

超级详细!!!新手使用AutoDL跑深度学习(MixVPR项目)的学习记录

新手第一次在AutoDL上跑深度学习的实验,遇到一些问题,简单记录一下。如果大家发现问题,欢迎和我讨论。

weixin_45152283的博客 5万+

20 CVPR Learning 3D Semantic Scene Graphs From 3D Indoor Reconstructions 学习笔记

3RScan是大规模真实世界的室内场景,特点是对478个自然改变的室内环境在不同的时间帧进行了1482 RGB-D scans,每一个scene都包括了一些位置被改变的物体。它和ScanNet数据集的区别主要在于ScanNet中的每一个采样环境都不相同,但是3RScan中存在采样环境相同但物体的位置不同的场景。Scene Graph Annotations 则是在3RScan的基础上给物体加入了场景图需要的关系、物体特征和类别标注,同时对3RScan进行了扩展,以此形成了场景图数据。

weixin_43508459的博客 1834

《CLR via C#》读书笔记-.NET多线程(三)

主要记录了CLR线程池的基本知识、CLR线程池的几个常用方法,以及执行线程与辅助线程的上下文的“流动”,对应《CLR via C#》的26.1-26.3小节

郑林的专栏 981

Atlas 300I Duo - vllm部署Qwen3-VL-8B-Instruct

本文介绍了在Ascend NPU环境下部署Qwen3-VL-8B大语言模型的步骤。主要包括:1)安装驱动、docker和vllm镜像;2)创建特权容器并挂载设备与目录;3)进入容器安装指定版本的transformers;4)设置环境变量和NPU卡配置;5)启动vllm服务;6)测试API接口。部署过程涉及多块NPU卡的使用,需注意内存碎片化问题,最终通过vllm框架提供模型推理服务。

m0_50105717的博客 1561

NET CLR via C#读书笔记 - 第九章 参数

NET CLR via C#读书笔记 - 第九章 参数1 可选参数和命名参数1.1 代码示例1.2 可选参数以及命名参数的规则和原则2 以引用方式传参3 可变数量的参数 1 可选参数和命名参数 1.1 代码示例   可选参数就是函数包含默认值得形参,命名参数是指调用方法的时候通过指定参数名称来传递实参,代码示例如下: public sealed class Demo{ //定义含有默认参数值的函数 其中x,s就是可选参数 public void dpFunc(int x = 0,string s = "

CreateNewWorld的博客 264

【AI黑话日日新】什么是对比学习?

模型效果高度依赖大规模、高质量的人工标注数据。数据标注不仅成本高昂、周期漫长,在医疗、工业、小众垂类等场景中,甚至难以获取足量的标注样本,严重限制了模型的泛化能力与应用边界。自监督学习的出现,为解决这一问题提供了全新思路——无需人工标注标签,而是利用数据自身的结构与内在关联,构建自生成的监督信号完成模型预训练,再通过微调适配下游任务。在众多自监督学习方法中,对比学习(Contrastive Learning)

专注:太空算力、AI infra、异构调度、大模型成本工程 730

AD快速上手笔记

本文详细介绍了使用Altium Designer从零创建PCB项目全流程:新建工程、绘制原理图(元件放置、连线、电源端口)、编译检查、生成PCB、布局布线(含铺铜)、DRC检查及输出Gerber与钻孔文件。重点强调了库选择、参数修改、层切换、铺铜设置和生产文件导出规范,确保设计无误,便于顺利下单生产。

qq_53529450的博客 42

《CLR via C#》读书笔记 之 目录导航

《CLR via C#》读书笔记 之 目录导航 2013-02-27 读书笔记是按书本章节按序写的,只摘录了个人认为比较重要,关系比较紧密的知识点。第4部分 核心机制 和第5部分 线程处理 等有时间再整理 CLR核心功能包括:内存管理,程序集加载,安全性,异常处理,以及线程同步。 第Ⅰ部分 CLR基础 第一章:《CLR via C#》读书笔记 之 CLR执行模型 第二章: 《CLR...

weixin_34319999的博客 64

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

《CLR via C#》CLR基础

CLR是公共语言运行库(Common Language Runtime),又叫公共语言运行时。CLR和Java虚拟机一样也是一个运行时环境,是一个可由多种编程语言使用的运行环境,可由面向CLR的所有语言使用。它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。 .NET框架是一种以CLR为基础、支持多种语言(C#、F#、VB.NET、C++、Python等)的开发的软件...

陈云佳的专栏 3758

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: NET CLR via C#读书笔记 - 第七章 常量和字段
下一篇: NET CLR via C#读书笔记 - 第九章 参数
藏海花鸣
博客等级 码龄8年 40粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值