技术经验分享: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

读字段

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


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

相关文章
|
14天前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
5天前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
|
5天前
|
人工智能 开发框架 算法
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
|
5天前
|
传感器 应用服务中间件 Linux
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)
|
5天前
|
人工智能 算法 C#
C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)
C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)
|
5天前
|
开发框架 .NET Java
C#/.NET/.NET Core自学入门指南
C#/.NET/.NET Core自学入门指南
|
12天前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
28 0
|
12天前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
19 0
|
12天前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
35 0
|
12天前
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
22 0