技术经验分享:C#入门详解(8)

简介: 技术经验分享:C#入门详解(8)

字段


什么是字段


字段(field)是一种表示与对象或类型/结构体关联的变量


字段是类型的成员,旧称“成员变量”


与对象关联的字段也叫做实例字段


与类型关联的字段称为静态字段,由static修饰


字段的声明


参见C#语言定义文档


尽管字段声明带有分号,但它不是语句


字段的名字一定是名词


字段的初始值


无显示初始化时,字段获得其类型的默认值,所以字段永远都不会未被初始化


实例字段初始化的时机-对象创建时


静态字段初始化的时机-类型被加载的时候


只读字段


实例只读字段


静态只读字段


属性


什么是属性


属性是一种用于访问对象或类型的特征的成员,特征反映了状态


属性是字段的自然拓展


从命名上看,field更偏向于实例对象在内存中的布局,property更偏向于反映现实世界对象的特征


对外:暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的


对内:保护字段不被非法值污染


属性又Get/Set方法对进化而来


又一个语法糖-属性背后的秘密


属性的声明


完整声明-后台成员变量与访问器


简略声明-只有访问器


动态计算值的属性


注意实例属性和静态属性


属性的名字一定是名词


只读属性-只有getter没有setter


尽管语法上正确,几乎没有人使用只写属性,因为属性的主要目的是通过向外暴露数据而表示对象/类型的代码


属性与字段的关系


一般情况下,它们都用于表示实体的状态


属性大多数情况下是字段的包装器

//代码效果参考: http://www.lyjsj.net.cn/wx/art_23036.html


建议:永远使用属性来暴露数据,即字段永远都是private或protected的


字段到属性进化史


public class Student


{


public int Age;


}


此时实例化获得对象后,使用Age字段,可以设置任意值,容易被污染


public class Student


{


private int age;


public int GetAge()


{


return this.age;


}


public void SetAge(int value)


{


if (value>=0&&value<=100)


{


this.age = value;


}


else


{


throw new Exception("错误的输入");


}


}


}


}


将字段的访问性设为private(一般会小写开头),然后添加方法来管理获取和设置字段值。


上面的方法过于冗长,而且获取设置要通过方法,没有最开始直接调用字段来的直接。微软创造了属性这个概念,里面有set,get访问器。


public class Student


{


private int age;


public int Age


{


get


{


return this.age;


}


set


{


if (value>=0&&value<=100)


{


this.age = value;


}


//代码效果参考:http://www.lyjsj.net.cn/wx/art_23034.html

else

{


throw new Exception("输入错误");


}


}


}


}


这样一来通过属性来暴露数据,在属性里做对字段的处理逻辑。


索引器


什么是索引器


索引器是这样一种成员:它使对象能够用与数组相同的方式进行索引


索引器的声明


参见C#语言定义文档


注意:没有静态索引器


常量


什么是常量


常量是表示常量值的类成员


常量隶属于类型而不是对象,即没有实例常量


注意区分成员常量与局部常量


常量的声明


各种只读的应用场景


为了提高程序的可读性和执行效率--常量


为了防止对象的值被改变--只//代码效果参考:http://www.lyjsj.net.cn/wz/art_23032.html

读字段

向外暴露不允许修改的数据--只读属性,功能与常量有一些重叠


当希望成为常量的值类型不能被常量声明接受时--静态只读字段

相关文章
|
11月前
|
人工智能 运维 算法
基于 C# 深度优先搜索算法的局域网集中管理软件技术剖析
现代化办公环境中,局域网集中管理软件是保障企业网络高效运行、实现资源合理分配以及强化信息安全管控的核心工具。此类软件需应对复杂的网络拓扑结构、海量的设备信息及多样化的用户操作,而数据结构与算法正是支撑其强大功能的基石。本文将深入剖析深度优先搜索(Depth-First Search,DFS)算法,并结合 C# 语言特性,详细阐述其在局域网集中管理软件中的应用与实现。
245 3
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
733 7
|
缓存 监控 算法
基于 C# 网络套接字算法的局域网实时监控技术探究
在数字化办公与网络安全需求增长的背景下,局域网实时监控成为企业管理和安全防护的关键。本文介绍C#网络套接字算法在局域网实时监控中的应用,涵盖套接字创建、绑定监听、连接建立和数据传输等操作,并通过代码示例展示其实现方式。服务端和客户端通过套接字进行屏幕截图等数据的实时传输,保障网络稳定与信息安全。同时,文章探讨了算法的优缺点及优化方向,如异步编程、数据压缩与缓存、错误处理与重传机制,以提升系统性能。
291 2
|
11月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
463 0
|
Web App开发 Linux C#
C# 网页截图全攻略:三种技术与 Chrome 路径查找指南
本文主要介绍了在 C# 中实现网页截图的几种技术及相关要点。涵盖了 PuppeteerSharp、Selenium 和 HtmlToImage 三种方式,分别阐述了它们的安装步骤及核心代码。同时,针对在 C# 中寻找 Windows 上 chrome.exe 路径这一问题,分析了未安装 Google Chrome 和已安装两种情况下的查找原因,并给出了相关参考链接,还列举了一系列与 C# 使用 Selenium、获取 chrome.exe 路径以及在 Linux 上部署相关的参考资料。
506 11
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
255 6
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
276 6
|
程序员 C# 数据库
C# 比较对象新思路,利用反射技术打造更灵活的比较工具
中途接手的项目,碰到需要在更新对象信息时比较并记录差异的需求,最变态的还有附加要求,怎么办?有没有既能满足需求又能对项目影响最小的方法呢?分享这个我封装的方法,一个利用反射技术打造的更灵活的比较工具
246 5
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
170 3
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
911 8