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

STM32F103C8T6+HX711实战:从零打造智能体重秤(附OLED显示与语音播报)

本文详细介绍了基于STM32F103C8T6微控制器和HX711称重模块,从零构建智能体重秤的完整实战教程。内容涵盖硬件选型、系统架构、驱动编写、数据滤波校准算法,并实现了OLED显示与语音播报功能。该项目是嵌入式学习的综合性实践,尤其适合作为毕业设计课题,帮助开发者掌握传感器应用、数据处理及人机交互等核心技能。

weixin_28285943的博客 517

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

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

weixin_30872499的博客 2241

MT6816角度传感器SPI通信避坑指南:从数据手册到稳定读取的3个关键步骤

本文详细解析了MT6816角度传感器SPI通信中的常见问题与解决方案,包括寄存器地址计算、SPI时序配置和数据校验等关键步骤。通过实测波形和代码示例,帮助工程师避开数据手册中的隐藏陷阱,实现稳定可靠的角度数据读取,特别适用于高精度电机控制场景。

weixin_42520573的博客 516

Mac用户福音:三步搞定PyMol开源版,告别许可证弹窗(附Homebrew/MacPorts安装指南)

本文为Mac用户提供三步安装PyMol开源版的详细指南,帮助科研人员告别许可证弹窗烦恼。通过Homebrew或MacPorts包管理器安装开源核心,并与商业版图形界面整合,实现无干扰的分子可视化研究体验。特别适合MacOS用户快速部署PyMol进行结构生物学分析。

weixin_28743405的博客 194

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

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

gitblog_09724的博客 786

三菱CNC数据采集实战:从SDK安装到C#代码调试全流程(附完整资源包)

本文为C#开发者提供了三菱CNC数据采集的完整实战指南。详细介绍了从获取并安装核心A2协议SDK、配置Visual Studio开发环境,到理解COM接口文档、封装C#通信类,并构建具备多设备连接与定时采集功能的WinForms应用程序的全流程。文章重点分享了网络调试、异常处理及性能优化等关键实战经验,帮助开发者高效打通工业自动化数据采集链路。

oauth7security的博客 707

《CLR Via C#》第一章

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

weixin_51374560的博客 964

YOLOv12改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv12的模型配置文件在中,里面包含yolov12的以及的不同大小的模型,本文将详细介绍一下YOLOv12模型文件中各参数的含义。

Limiiiing的博客 3275

基于经验模态分解和核主成分分析结合长短期记忆网络EMD-KPCA-LSTM的光伏功率预测算法--Matlab

基于经验模态分解和核主成分分析结合长短期记忆网络EMD-KPCA-LSTM的光伏功率预测算法--Matlab

前程算法屋的博客 625

CLR via C 第四版示例源码

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

gitblog_06773的博客 379

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3261

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

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

2301_79124729的博客 1198

#systemverilog# 之 event region 和 timeslot 仿真调度(二)例子

由于疫情的关系,一时半会回不了学校了。今天开始,哪怕在家也要克服惰性开始学习了。今天来个的想了很久但都犯懒而没动手的内容,就是关于仿真软件在跑systemverilog的时候,是如果通过将HDL代码分成5个区域来编译,从而实现用软件模拟硬件的运行结果的思想。 首先,是基础概念,systemverilog标准划分了仿真软件的5个跑仿真所要执行的区域,说白了就是规定了软件在跑代码的时候要把代码分成5类,放到5个堆栈里面分别跑,这样才能:明明在软件上是以顺序方式来执行代码的,却能“看似”像在硬件中那样的实现并行

那么菜的博客 1763

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《CLR Via C#》第二章

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

weixin_51374560的博客 613

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

余额充值