C# 复习笔记2

C# 复习笔记 消息与事件处理 C# 复习笔记 消息与事件处理学习Windows编程后,有时候需要对系统消息或者事件做出自己的响应或者说自己拦截一些消息,实现某个事件或者函数的触发,这时就需要对系统消息进行处理. 大多数直接开始学习C#没有对C++有太多了解的猿们(包括我在内),都不太了解消息机制,还是看看百度百科的解释吧:百度百科对Windows消息机制的解释 简单的说,我个人理解,Windows是建立在消息机制上的.消息机 阅读详情

面向对象编程:类和对象(一)

  • 背景:C语言把重点放在写函数上,较大的任务被分解成若干小任务,每个任务均由函数实现,这种分而治之的编程思想称为结构化编程。
  • C语言模块化编程:一个功能模块统一放一个C文件中,这个模块相关的函数全部在这个C文件中实现,在主文件(即有main函数的C文件)想要使用这个模块的功能函数,只需要包含它的头文件就可以调用了,那头文件就只是放这个功能模块的函数声明。
  • 面向对象的基本概念:类、封装、接口和对象
  • 类:属性+行为;数据+函数
  • 封装:汽车的运行原理已经被伟大的工程师封装在汽车内部,提供给司机的只是一个简单的使用接口,司机操纵方向盘和各种按钮就可以灵活自如的开动汽车了。
  • 接口:在面向对象编程中,只要保持接口不变,你可以任意改变类的实现细节,用一个设计更好的类替换原来的类,实现类的升级换代。

面向对象基本概念

  • 类:C# 中把类的成员变量称为Field(字段);
  • 把变量或方法标记为private,可以有效确保它们只在类内部工作,编译器不允许类以外的任何代码访问他们,从而确保这些数据不被外界所修改,大大增强了程序的健壮性。另外只要保持公有成员(接口)不变,对类内部进行任何优化都不会对外界产生影响,所以我们一般尽量把类的成员设计为私有,以利于类的升级改造。哪些成员为公有,哪些成员为私有,需要精心考量。
  • 属性:原则上我们可以随时访问类的公有成员,但这种不加限制的访问可能会造成问题,比如:
  •  kitty.age = -10
    
  • 如何对赋值进行合法性检查呢?一种办法是把变量age声明为私有,并定义一个公有方法来访问它。用公有方法读写变量不但可以对数据进行合法性检查,而且提高了类的封装性,一箭双雕。这种专门用来读写数据的方法称为访问器。
  • 访问器虽然解决了变量age 的访问问题,但是人们还是习惯于把年龄作为一个变量对待,用方法访问不符合人们的思维习惯。为了解决这个问题,C#设计了一种特殊的语法——属性(Property)
//属性Age
public int Age
{
	get
	{
		return age;
	}
	set
	{
		if (value <= 0)
			age = 0;
		else
			age = value;
	}
}
  • 在属性中,定义了get和set两个访问器,get访问器用来读取变量的值,set访问器用来设置变量的值,合法性检查的代码定义在两个访问器中,需要提醒的是set访问器没有声明显示参数,但它有一个名为value的隐式参数。
  • 属性的运行方式和方法相似,因此属性可以看作特殊的方法,但属性的使用方式和变量完全相同。
Cat kitty = new Cat();
kitty.Age = 3;
int age = kitty.Age;
  • 属性既有封装性,又可进行合法性检查,还符合变量的使用习惯,达到了一箭三雕的效果。习惯上,我们一般把类的所有变量均设为私有,然后通过公有属性来访问它们。

  • 自动属性:有时候属性很简单,get和set里面只有取值和赋值,没有其它逻辑代码,这种属性可以通过自动属性来快速定义。

  •   public int Name{get;set;}
    
  • 垃圾回收机制:当对象即将离开作用域时,系统自动调用对象的析构函数,释放对象所占的资源。然而在大型的程序中,有时有些对象虽然不再使用了,但离作用域结束还有相当长的时间,在这期间,对象仍然占用内存,浪费资源。

  • 在C++中,程序员需要显式的用delete语句删除垃圾对象,如果程序员忘记了及时删除,这些垃圾对象有可能占用大量的内存空间,造成“内存泄露”。

  • 为了解决这个痼疾,C#专门设计了一套回收资源的机制——垃圾回收器。当垃圾回收器确定某个对象已经无用时,就会自动删除该对象,释放内存空间。

类的实例演练

  • 用属性的好处
  • 辅助函数的好处:SetTime()——方便类升级
【C#期末复习2】 最后一点就是坚持,有时候写这些东西真的很痛苦,很让人抓狂,但是你一旦你坚持下去,久而久之,你会看到自己的进步,某一天你回过头去看自己以前写的文章,当你能够说出:“写得真他妈菜”,那么恭喜你,已经你升级了“。                                   —— “程序员应该坚持写技术博客”原文链接:https://blog.youkuaiyun.com/d6619309/article... 阅读详情

相关推荐

c# .net 特性Attribute高级篇-实现特性多属性验证、多重验证、随意扩展的应用与实战,

在上一篇中我们讲了特性Attribute如何声明使用, 为什么我们声明的特性不像EF--MVC--WCF-WebService--UnitTest--IOC--AOP--SuperSocket里面的特性一样,具有申请的效果, 其,原因是因为我们需要在中间加一个反射控制器,来过滤Filter标记特性的类、方法、属性等; 接下来我们讲解下,特性Attribute的应用实战。 1 特性封装提供额...

橙-极纪元-JJYCheng 1486

C#嵌套类的使用方法及特性

        嵌套类(Nested Class)是在类中定义的类。以下把拥有内嵌类的类称为外部类。根据《深入理解嵌套类和内部类》嵌套类分为静态嵌套类和非静态嵌套类,其中非静态嵌套类页被称为内部类。 嵌套类在UML中是composite的另外一种代码表示形式,表示耦合度更高,并且与外部类更加紧密。       一般类的 访问修饰符可以定义为默认的internal 或者public,而内嵌类就有

沉默的糕点 5808

大学C#考试复习试题

c#考试复习题,该复习试题简单的将大学生c#考试的内容包括在里面,是学习c#专业备考的很好复习资料

C#中的嵌套类型

主要介绍了C#中的嵌套类

weixin_66598341的博客 1826

深入解析fio Benchmark测试:从源码到实践

本文深入解析fio Benchmark测试工具,从入门指南到源码架构分析,详细介绍了其核心模块、关键数据结构和I/O处理机制。通过实战案例展示如何优化存储性能测试,包括内存对齐、多线程调优等技巧,帮助开发者充分利用fio进行精准的存储性能评估。

weixin_42563415的博客 207

24GHz雷达DIY呼吸监测仪:用树莓派+TI IWR6843搭建生命体征检测系统(附Python代码)

本文详细介绍了如何利用树莓派和TI IWR6843毫米波雷达模块DIY非接触式呼吸监测仪。通过硬件选型、信号处理流水线设计和实时可视化系统搭建,实现高精度的生命体征检测,特别适合医疗健康和运动监测场景。附带的Python代码帮助开发者快速复现该系统。

rl6adventurer的博客 985

使用 DataAnnotations(数据注解)实现模型的通用数据校验

在实际项目开发中,无论任何方式、任何规模的开发模式,项目中都离不开对接入数据模型参数的合法性校验,目前普片的开发模式基本是前后端分离,当用户在前端页面中输入一些表单数据时,点击提交按钮,触发请求目标服务器的一系列后续操作,在这中间的执行过程中(标准做法推荐)无论是前端代码部分,还是服务端代码部分都应该有针对用户输入数据的合法性校验,典型做法如下:

ChaITSimpleLove的博客 2084

STM32测测速---编码电机读取速度的计算

速度计算:轮胎每转一圈的脉冲数取决于编码器的分辨率,可由下面公式进行计算:PPR是电机的线数最后可以计算轮胎每转一圈的脉冲数为:轮胎每转一圈的脉冲数 = 9.6 × 11 × 4 = 422.4最后的速度公式简化为:速度 = (0.01 秒内产生的脉冲数 ∗ 0.055 ∗ π )/(0.01 ∗422.4​。

weixin_69414084的博客 3811

C# 利用特性做数据校验

1、首先新建一个抽象类,规范所有的自定义属性 public abstract class CustormAttribute:Attribute { public abstract bool Validate(object value); } 2、新建一个类继承上边的抽象类,实现抽象类的方法 public class RequireAttribute : CustormAttribute { public override bool Vali

weixin_38866327的博客 1300

基于Simulink的PID控制汽车巡航控制系统建模与仿真

汽车巡航控制系统(Cruise Control System)是一种通过自动调节发动机输出功率来维持车辆以恒定速度行驶的技术。这种系统能够减轻驾驶员在长途驾驶中的疲劳,同时提高燃油经济性和行车安全性。PID(比例-积分-微分)控制器因其结构简单、性能稳定且易于实现而被广泛应用于汽车巡航控制系统中。本项目旨在通过MATLAB/Simulink平台设计和验证一个基于PID控制的汽车巡航控制系统,重点研究PID参数调优方法、系统动态响应特性以及稳态误差消除能力。

MHD0815的博客 196

基于ZYNQ PL的AD7606数据采集与FFT实时频谱分析:从硬件到创新实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kKnmpgJm-1750295287594)(https://example.com/fft_plot.png)]本文涉及代码已在Xilinx ZCU102开发板与AD7606评估板上验证通过,采样率支持200KSPS@8通道,FFT计算延迟<1ms。传统MCU+DSP方案难以兼顾速度与功耗,而ZYNQ的PL+PS架构为这一问题提供了完美解决方案。本文实现的ZYNQ PL方案突破了传统处理器的性能瓶颈,通过。

QQ_778132974的博客 338

C#复习笔记(2)

 

raekwon_dotnet的专栏 560

华为od统一考试B卷【单词搜索】C++ 实现

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

MISAYAONE的博客 709

C#复习笔记(3)--C#2:解决C#1的问题(可空值类型)

C#复习笔记(3)--C#2:解决C#1的问题(可空值类型)

dearbaba_11的博客 98

HFSS实战项目——GPS北斗双模微带天线

本文设计了一款方形圆极化微带天线应用于北斗B1和GPSL1频段,满足高增益、低VSWR、适当方向图等要求。设计中心频率为1568MHz,介质板采用厚度h=1.6mm的Arlon AD450(tm)板,相对介电常数为4.5,采用探针馈电。

2401_87464239的博客 1767

Response Instance 详解:在 ABAP OData Client Proxy 中读懂每一次响应

ABAP OData Client Proxy中的Response Instance是关键信息载体,封装了业务数据及调用上下文(如分页、delta link等)。响应实例在执行请求后自动生成,根据请求类型返回特定接口(如READ返回/IWBEP/IF_CP_RESPONSE_READ)。响应抽象与OData版本解耦,支持统一处理V2/V4服务。常见响应类型包括单实体读取、列表读取(支持分页和增量同步)、创建/更新/删除响应等。开发时可通过响应对象的安全类型方法获取数据,如get_business_data获

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 136

C#复习笔记(2)--C#1所搭建的核心基础

通过对C#1所搭建的核心基础的深入了解,可以知道之后的C#版本在C#1的基础上做了很多扩展,而这些扩展都是基于C#搭建的核心基础而来的。 委托 一、编写委托的过程 委托经常和C语言的“函数指针”挂钩。委托是方法参数化、函数式语言一个重要的表达方式。C#1中编写一个委托要经过四部: 1、声明委托类型 delegate void StringProcessor(string param1)...

weixin_30415801的博客 123

OV9734 DATASHEET,完整规格书

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

C#复习笔记(3)--C#2:解决C#1的问题(实现迭代器的捷径)

实现迭代器的捷径 从这个题目上可以看到C#1实现一个迭代器模式的话是多么的痛苦,我自己也写过不下40行的代码来实现一个迭代器,C#中的迭代器模式是通过IEnumerable和他的泛型等价物IEnumerable<T>来表示的。 C#1如何去实现一个迭代器我不想在列出代码,因为C#2中实现迭代器的代码会被编译器重新编译成C#1实现的迭代器,到那个时候再来看吧。 C#2是利用一个关键...

weixin_30794851的博客 183

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IDEA的使用指南

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

C#编程-63:SQLServer复习笔记(2)

标识符规范设置为True即可使得主键自动增加 char(10):表示固定长度为10 字符,如果不足,就以空格填充 varchar(10):表示长度最大为10的可变字符,不足不填充 var=variabel  报错:String or binary data would be truncated.解决方法 原因:是因为数据库中定义...

彭世瑜的博客 926

lwip-2.0.3

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

(1-2)章深入.NET平台和C#编程 复习的时候 整理的笔记

一、深入.NE框架 1、值传递和引用传递的区别:传递的方式不同,值传递传的是数值,而引用传递传的是地址 2、.NET框架具有两个主要组件:公共语言运行时(CLR)和框架类库(FCL)  CRL包含:CLS(公共语言规范)和CTS(通用类型系统) 3、.NET核心框架类库及其功能:     System:此命名空间包含所有其他的命名空间     System.Collections.Gen

You Jump,I Jump. 1263

C#复习笔记(3)--C#2:解决C#1的问题(进入快速通道的委托)

委托 前言:C#1中就已经有了委托的概念,但是其繁杂的用法并没有引起开发者太多的关注,在C#2中,进行了一些编译器上的优化,可以用匿名方法来创建一个委托。同时,还支持的方法组和委托的转换。顺便的,C#2中增加了委托的协变和逆变。 方法组转换 方法组这个词的含义来自于方法的重载:我们可以定义一堆方法,这堆方法的名称都一样,但是接受的参数不同或者返回类型不同(总之就是签名不同----除了名字),...

weixin_30502965的博客 128

C#编程-63:SQLServer复习笔记(2)_彭世瑜_新浪博客

标识符规范设置为True即可使得主键自动增加 char(10):表示固定长度为10 字符,如果不足,就以空格填充 varchar(10):表示长度最大为10的可变字符,不足不填充 var=variabel 报错:String or binary data would be truncated.解决方法 原因:是因为数据库中定义的字段长度比较小...

彭世瑜的博客 792

C#期末考试复习笔记

C#复习笔记1. C#语言概述2. 常用标签控件3. 数据类型4. 运算符和表达式5. 数组6.GDI+图形7. 方法8. 窗体和控件 1. C#语言概述 c#语言是面向对象的程序设计语言,后缀名是.cs c#语言没有指针 c#语言完全拥有.NET的自动回收机制 c#语言不能用于硬件驱动程序的开发 .NET是一个用于建立应用程序的平台 源代码是一个用于应用程序的核心,没有源代码则无法编译一个应用程序 工具栏是一些工具按钮的组合 Console.ReadLine()的作用是防止程序运行完后控制台自动关闭 c

My___优快云的博客 3868

C#复习资料

C#期末考试复习题 一、单项选择题(每小题2分,共20分) 1.在类作用域中能够通过直接使用该类的( )成员名进行访问。 A. 私有 B. 公用 C. 保护 D. 任何 答案:D 2.小数类型(decimal)和浮点类型都可以表示小数,正确说法:( ) A. 两者没有任何区别 B. 小数类型比浮点类型取值范围大 C.小数类型比...

weixin_30347009的博客 1824

C#复习2

C#复习 22.类(class)引用参数输出参数参数数组可选参数 2.类(class) 类是一个面向对象的概念,就是把数据和函数封装成一个集合,可以把现实中的事物抽象成一个类,数据代表熟悉,函数代表功能。 引用参数 1.使用引用参数时,必须在方法的声明和调用时都使用ref修饰符。 2.实参必须是变量,而且在用作实参前必须被赋值。如果是引用类型变量可以赋值一个引用或者null。 输出参数 1.和引用...

pengtengpengteng的博客 216
上一篇: C# 复习笔记1
下一篇: C# 复习笔记3
henhaoji_123
博客等级 码龄10年 260粉丝 283原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值