NET CLR via C#读书笔记 - 第十章 属性

《CLR via C#》学习笔记【1】 一、CLR的执行模块1.1 将源代码编译成托管模块 非托管C/C++可对系统进行低级控制,按自己的想法管理内存、VB可以快速生成UI应用程序,并控制COM对象和数据库。 公共语言运行时(Common Language Runtime, CLR)是一个由多种编程语言使用的“运行时”。CLR的核心功能(如内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用。 事实上在运行 阅读详情

1 无参属性

1.1 无参属性代码

  代码示例:

public class Demo{
	private string m_s;
	private int m_i;

	public string S{
		get{return m_s;}
		set{m_s = value}
	}
	
	public int I{
		get{return m_i;}
		set{m_i = value}
	}
}

void UseDemo(){
	Demo d = new Demo();
	d.S = "Hello";
	d.I = 1;
	string s = d.S;
	int i = d.I;
}

1.2 无参属性说明

  ① CLR支持静态,示例,抽象和虚属性。
  ② 属性可由任意可访问性修饰符进行修饰,可在接口中定义。
  ③ 属性不可重载。

1.3 AIP(自动实现的属性)

1.3.1 AIP代码

  代码示例:

public class Demo{
	private int m_i;

	//AIP属性
	public string S{ 
		get;set;
	}
	
	//非AIP属性
	public int I{
		get{return m_i;}
		set{m_i = value}
	}
}

void UseDemo(){
	Demo d = new Demo();
	d.S = "Hello";
	d.I = 1;
	string s = d.S;
	int i = d.I;
}

1.3.2 AIP优点与不足

1.3.2.1 优点

  使用AIP时,表示你已经创建了一个属性,访问该属性的任何代码都会调用get/set访问器,后续在你需要自己定义get/set函数时,访问属性的任何代码都不需要重新编译。

1.3.2.2 不足

  ① AIP必须显示初始化字段,没有简便语法初始化。
  ② 使用AIP的类型无法序列化和反序列化,因为AIP定义的字段名由编译器决定,每次编译都会发生变化。
  ③ 无法断点调试get/set方法。

1.4 字段与属性的区别

  ① 属性可以是只读或者只写,字段通常可读可写(readonly修饰的除外)。
  ② 属性方法可能抛出异常,但字段访问永远不会。
  ③ 属性不能作为ref或者out参数传递给方法,字段可以。
  ④ 执行效率,属性方法通常花费较多时间执行,字段访问总是立即完成。
  ⑤ 属性方法可能会造成明显的副作用,但字段永远不会,属性可能会触发由于属性使用顺序不同导致类型行为异常。
  ⑥ 属性方法可能需要额外的内存空间,或者返回的引用指向的不是对象状态的一部分,造成修改内容无法作用于对象本身的问题。
  ⑦ 属性方法连续调用可能会返回不同的值。

2 有参属性

  C#中有参属性又叫索引器,C#使用数组风格来公开有参属性,可以理解为对[]进行重载。
  代码示例如下:

public class Demo{
	private int m_i;

	//AIP属性
	public string S{ 
		get;set;
	}
	
	//非AIP属性
	public int I{
		get{return m_i;}
		set{m_i = value}
	}
	
	//索引器 此处仅为示例  无任何意义
	public int this[int i]{
		get{ return 0; }
		set{
			if(i > 0)
			{
				m_i = value;
			}
		}
	}
}

3 属性访问器性能

  由于属性访问器一般代码量较少,且调用相对频繁,编译器编译时会使用内联,提高属性访问器的执行效率,事实上内联在函数调用时不会有效率上的损耗,且由于代码量小,一般不会造成严重的代码膨胀效应,除非属性访问器写的代码过多,一般这种情况都建议修改为字段加方法的形式。
  以上内容为对《NET CLR via C#(第四版)》第十章内容的阅读笔记,只记录其中核心部分内容,书中对以上主题还进行详细的代码演示说明,如需要详细阅读请自行查阅本书第十章内容,感谢您的阅读。

CLR via C#: 4th Edition with Full Table of Contents CLR是.NET平台的运行时引擎,它负责管理代码的执行,提供了诸如内存管理、线程同步、异常处理等运行时服务。CLR使得.NET支持的编程语言可以在相同的虚拟环境中运行,而与底层操作系统和硬件平台无关。这种特性使得.NET应用程序具有良好的可移植性。.NET类型系统是建立在值类型和引用类型这两个概念上的。值类型直接存储数据,而引用类型存储对数据(对象)的引用。理解这两种类型的区别及其转换是管理内存和编写高效代码的关键。.NET 允许开发者创建自定义异常类,这些类通常继承自类。 阅读详情

相关推荐

《CLR via C# 第四版》配套示例源码深入分析

NET类型系统允许开发者使用两种类型的对象:引用类型和值类型。引用类型存储在堆上,而值类型存储在栈上或作为结构体的成员存储在堆上。引用类型包括类、接口、委托、数组等;值类型包括基本数据类型、枚举以及结构体。.NET允许开发者创建自己的异常类型,以便更加具体地表示应用程序中可能发生的特定错误。自定义异常通常继承自类或其子类。创建自定义异常时,推荐在构造函数中使用来调用基类的构造函数,以便提供有用的错误信息。

weixin_35752122的博客 1073

.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

《CLR via C# 最完整中文版》电子书下载种子

本文还有配套的精品资源,点击获取 简介:《CLR via C#》是Jeffrey Richter撰写的深入介绍.NET CLR内部机制的经典书籍。中文版为中文读者提供了学习.NET开发核心技术的良机。书中详细讲解了.NET类型系统、内存管理、JIT编译、异常处理、多线程编程、反射、元数据、安全模型等关键知识点,并结合案例理论与实践,帮助开发者编写出更高效、可靠的.NET程序...

weixin_35433448的博客 1328

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

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

郑林的专栏 981

CLR via C#(第3版)中英文双语带书签及源码完整版

CLR(Common Language Runtime)是.NET程序的执行引擎,负责管理代码的加载、编译、执行与资源回收。其核心组件包括JIT编译器、垃圾回收器(GC)、类型系统、异常处理机制和安全引擎,共同构成托管执行环境。// 示例:一个简单的托管程序入口");该代码在运行时由CLR完成程序集加载 → JIT编译 → 托管执行 → 内存自动管理的全生命周期控制,体现其对开发者透明但底层高度可控的特性。场景推荐做法频繁创建大数组改用复用缓冲区。

weixin_33608403的博客 914

NET CLR via C#高清中文版 (第4版)

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

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版)中文版(百度网盘链接地址)

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

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

NET CLR via C#读书笔记 - 第八章 方法1 实例构造器与引用类型(类)2 实例构造器和值类型(结构)3 类型构造器4 操作符重载方法5 转换操作符方法5.1 转换操作符方法描述5.2 转换操作符方法重载6 扩展方法7 分部方法 1 实例构造器与引用类型(类)   ① 构造器是将类型实例初始化为良好状态的特殊方法。   ② 元数据表中名字为.ctor   ③ 创建引用类型时,首先为实例的数据字段分配内存并将分配的内存字节初始化为0,其次初始化附加字段(类型对象指针和同步块索引),最后调用实例构造

CreateNewWorld的博客 329

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

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

.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)核心类型,对泛型和线程处理等深奥 难懂的开发概念提供权威、实用的指导。

《CLR via C#》CLR基础

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

陈云佳的专栏 3758

PDF与OFD电子发票解析技术实战:从格式转换到精准识别

本文深入探讨了PDF与OFD电子发票解析技术的实战应用,从格式转换到精准识别,提供了全面的解决方案。通过OFD转PDF技术、动态定位算法和多重校验机制,显著提升电子发票识别效率与准确率,助力企业财务数字化转型。

weixin_42565652的博客 164

CLR基础之一---认识CLR [《CLR via C#》读书笔记]

《CLR via C#》读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称。这是通用语言架构(简称CLI)的微软实现版本,它定义了一个代码运行的环境。CLR运行一种称为“通用中间语言”的字节码,这个是微软的通用中间语言实现版本。 CLR运行在微软的视窗操作系统上...

weixin_30872499的博客 2241

手把手教你复现KDD 2024时空预测顶会论文:以UniST和ImputeFormer为例的代码实战与避坑指南

本文详细指导如何复现KDD 2024顶会论文中的UniST和ImputeFormer模型,涵盖环境配置、数据处理、模型训练及评估等关键步骤。通过实战案例和避坑指南,帮助研究者掌握时空预测与插补技术,提升在智慧城市、交通管理等领域的应用能力。

weixin_29204205的博客 279

【Kingbase人大金仓】授权文件更换

本文介绍了金仓数据库授权文件更换的步骤:1.通过ksql或客户端工具查询数据库版本;2.在官网下载对应版本的license.bat文件;3.替换前先备份原授权文件(使用tar命令压缩),再用新文件覆盖原文件。注意事项包括:版本号需严格对应,授权文件通常位于安装目录下,可使用find命令查找具体位置。操作需谨慎,建议先备份原文件以便恢复。

qq_34463511的博客 3459

【亲测免费】 深入探索.NET CLR:《CLR via C》第4版资源推荐

深入探索.NET CLR:《CLR via C#》第4版资源推荐 【下载地址】CLRviaC第4版中英文版资源下载 - **书名**: CLR via C# 第4版- **语言**: 中文版 & 英文版- **格式**: PDF- **特点**: 高清无水印 ...

gitblog_09724的博客 786

计算机组成原理实验:手把手教你用模拟程序实现中断机制(附完整代码)

本文通过一个计算机组成原理模拟实验,手把手教你从零实现一个可工作的中断系统。实验详细演示了如何配置中断控制器、编写主程序与中断服务程序,并观察中断响应、现场保护和恢复的全过程,深入解析了中断原理的核心机制。

471

《CLR Via C#》第一章

大致介绍了CLR执行应用程序的流程,编译代码流程,介绍了IL、元数据和程序集的关系。

weixin_51374560的博客 964

浅谈IC测试向量(pattern)及其转换

随着集成电路的飞速发展,其规模越来越大,对电路的质量与可靠性要求进一步提高,集成电路的测试方法也变得越来越困难,为了实现芯片的快速测试和筛选,ATE设备为其提供了强有力的支撑。ATE运用芯片设计仿真文件,将其作为芯片输入激励,通过ATE测试平台提供芯片测试环境,将芯片的输出和测试结果进行比较,以此来判定芯片的好坏。 说起IC测试,不得不说一下Pattern这个词,它中文的意思是模式。在图像处理中,这个词意思为图像的纹理特征,而在IC也即芯片测试行业,这个词实际上代表了需要测试芯片的时序特征。简单的说,在测

flomingo1的专栏 1万+

从零构建XVC协议栈:FPGA+W5300的跨界调试架构实战

本文详细介绍了如何从零构建XVC协议栈,通过FPGA与W5300以太网控制器的创新组合实现跨界调试架构。重点解析了JTAG时序逆向、TCP/IP协议栈集成与XVC协议实现,提供了硬件设计优化和性能加速技术,为嵌入式开发者和FPGA工程师提供实用的远程调试解决方案。

raspberrypi5的博客 247

CLR via C 第四版示例源码

CLR via C# 第四版示例源码 【下载地址】CLRviaC第四版示例源码 探索.NET底层奥秘,深入理解C#与CLR的交互机制!《CLR via C# 第四版》示例源码为您提供了书中所有关键概念的实践代码,帮助您将理论知识转化为实际技能。源码按章节组织,涵盖公共类库和解决方案文件,方便您快速上手。只需配置好.NET...

gitblog_06773的博客 379

SPSS与SPSS Modeler,不一样的世界

1. SPSS软件的前世今生 1.1 IBM SPSS的由来 与数据打过交道的小伙伴们,应该对SPSS软件都不陌生。SPSS是世界上最早的统计分析软件,由斯坦福大学的三个研究生大牛于1968年研发,同时还成立了SPSS公司。SPSS最初的全称是Solutions Statistical Package for the Social Sciences(社会科学统计软件包),随着SPSS产品服务领...

qq_24339451的博客 3613

CLR via C# 第一章—第十三章

方法、构造函数、索引器或委托的定义可以指定其形参为必需还是可选。任何调用都必须为所有必需的形参提供实参,但可以为可选的形参省略实参。每个可选形参都有一个默认值作为其定义的一部分。如果没有为该形参发送实参,则使用默认值。

2301_79124729的博客 1198

【异常】Milvus 向量数据库字段缺失错误分析与解决 MilvusVectorStoreServiceV2 - Failed to insert batch [0-1]: The field:

本文分析了Milvus向量数据库插入操作中出现的字段缺失错误。错误显示age_mode字段未提供,导致批量插入失败。根本原因是Milvus Schema要求所有定义字段必须存在,但代码中对部分字段采用条件添加方式。解决方案是将条件添加改为始终添加,为可能为null的字段提供空字符串默认值。文章总结了Schema约束、防御性编程等经验,并建议通过Schema变更检查、单元测试覆盖和数据校验层等预防措施避免类似问题。该问题影响product、mac、source等多个字段,修改后确保了数据插入的可靠性。

奶爸的编程之路,也就一周冷个三天 406

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《CLR Via C#》第二章

解释如何生成仅供自己的应用程序使用的程序集

weixin_51374560的博客 613

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 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、付费专栏及课程。

余额充值