C#对象和类型

属性、方法、字段

 


字段和属性的区别

在C#中,字段(fields)和属性(properties)都是类的成员,它们提供了类存储数据的方式,但它们在用途和功能上有着明显的区别。

        字段
        字段通常用来存储类或结构的状态信息。字段是类的数据成员,通常被用来定义类的存储数据。它们可以是任何类型:内置类型、用户定义的类型、内置或用户定义的委托等。

        1、字段可以是public、private、protected、internal 或 protected internal等访问修饰符修饰的。
        2、通常,字段应该被声明为private(或protected),以隐藏类的实现细节,并通过属性或方法来访问,这是封装的一种表现。
        属性
        属性像是类的特殊方法,称为访问器(accessors)。这使得你能够对类成员的访问进行更细粒度的控制。属性允许执行读取(get)和写入(set)操作,并在这些操作中加入额外的逻辑。

        1、属性提供了一种访问字段的方式,同时不暴露类的实现细节。通过get和set访问器,可以控制字段的读写权限,也可以添加额外的逻辑,比如验证输入数据。
        2、使用属性可以实现数据的封装和保护,因为你可以设置字段为private,仅通过属性对其进行访问和修改。
        3、属性可以是只读的(只有get),只写的(只有set),或者既有读也有写。
        字段和属性的区别
        1、封装:字段通常用于类内部的数据存储,而属性提供了一种控制字段访问的机制,实现数据的封装和保护。
        2、控制逻辑:通过属性的get和set访问器,可以在读写数据时添加特定的逻辑,比如数据验证或修改其他字段的值。字段不提供这种控制机制。
        3、绑定支持:在某些情况下,如数据绑定方面,通常需要使用属性而非字段,因为很多框架和库是通过属性进行数据绑定的。
        4、设计原则:按照C#的设计原则,公共数据成员应该被声明为属性而不是公共字段。即使是简单的数据存取,也推荐使用自动属性(auto-implemented properties)来提供更好的封装。
示例

class Person
{// 字段private string name;// 属性public string Name{get { return name; }set{if (string.IsNullOrEmpty(value))throw new ArgumentException("Name cannot be null or empty.");name = value;}}
}


在这个示例中,name字段被封装起来,不可以直接从类的外部访问。Name属性提供了对name字段的受控访问,它包含了额外的逻辑来验证输入,避免无效赋值。
————————————————

                       部分引用链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/390403.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gstreamer配合srs服务器实现RTMP直播和WebRtc直播

前言 上一篇文章,实现了配合腾讯云直播的推流,但是需要花钱,于是就在思考能不能搞一个局域网内,免费的RTMP直播呢? 最终发现了可以使用srs服务器。如果成功了,以后也可以使用webrtc的直播推流。 以下是实现效果: 一、搭建srs服务器: 参考:ubuntu环境下搭建SRS服务器(…

MyBatis全方位指南:从注解到XML文件的数据库操作

目录 一.什么是MyBatis 入门程序初体验 二.MyBatis基本操作CRUD ▐ 增(Insert) 返回主键 ▐ 删(Delete) ▐ 改(Update) ▐ 查(Select) 起别名 结果映射 开启驼峰命名(推荐) 三.MyBatis XML配置文件 ▐ 增(Insert) ▐ 删(Delete) ▐ 改(Update) ▐ 查(Select) …

Linux:Xshell相关配置及前期准备

一、Linux的环境安装 1、裸机安装或者是双系统 2、虚拟机的安装 3、云服务器(推荐)——>安装简单,维护成本低,学习效果好,仿真性高(可多人一起用一个云服务器) 1.1 购买云服务器 使用云服…

基于环形拓扑的多目标粒子群优化算法(MO_Ring_PSO_SCD)求解无人机三维路径规划(MATLAB代码)

一、无人机多目标优化模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节,无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找…

【传知代码】Flan-T5 使用指南(论文复现)

当今,自然语言处理技术正在以前所未有的速度和精度发展。在这个领域中,Flan-T5作为一种新兴的预训练语言模型,正吸引着广泛的关注和应用。Flan-T5不仅仅是一个强大的文本生成工具,它还能通过提供高效的语义理解和多任务学习能力&a…

springboot配置多个数据源

实际业务中;在一个项目里面读取多个数据库的数据来进行展示,例如读取mysql,pgsql,oracle的不同数据库,springboto对同时配置多个数据源是支持的。 使用springbootmybatis的框架来进行演示, 在配置文件中配…

美国失业率大幅上升,增加九月份降息利率的可能性

令人失望的是,美国7月份经济增加了11.4万个工作岗位,低于预期的17.5万个和6月的17.9万个。平均小时工资持续下降,但失业率升至4.3%。美元继续走低,美国国债也在下跌,而黄金则获得了提振。 7月份的非农业支付数据令人失…

鸿蒙 IM 即时通讯开发实践,融云 IM HarmonyOS NEXT 版

融云完成针对“纯血鸿蒙”操作系统的 SDK 研发,HarmonyOS NEXT 版融云 IM SDK 已上线,开发者可在“鸿蒙生态伙伴 SDK 市场”查询使用。 发挥 20 年通信行业技术积累和领创品牌效应,融云为社交、娱乐、游戏、电商、出行、医疗等各行业提供专业…

react引入高德地图并初始化卫星地图

react引入高德地图并初始化卫星地图 1.安装依赖 yarn add react-amap amap/amap-jsapi-loader2.初始化地图 import AMapLoader from "amap/amap-jsapi-loader"; import { FC, useEffect, useRef, useState } from "react";const HomeRight () > {con…

普通人有必要学Python吗?学了之后能做什么?

目录 首先来说一下极其推荐的方向: 1、数据分析 2、科学计算 3、大数据框架 4、脚本开发 5、爬虫 6、Web框架 总结: 如果你还没有开始使用Python,答应我,把这个回答看完,如果你真的学习并深入使用过Python&…

我的最爱之《达明一派》

达明一派,是我最爱。刘以达(Tats)与黄耀明(Anthony Wong)在1980年代的香港组成的二人流行音乐组合,在90年代,网络还没兴起时,那是卡带流行的岁月。90年代,我与好友,同考大学,他留在了南充读读书…

使用labelme生成mask数据集(亲测可行)

1、下载label.exe文件 链接:github地址 2、安装一下anaconda,百度一下直接安装就行 3、打开labelme.exe文件,直接加载图片,然后编辑多边形,就是mask的位置 4、画好mask了,保存为json文件,记住这…

【qiankun微前端】基座主应用(vue2)+多个微应用(任意框架)

前言 前段时间对我们已有的工程进行了微前端改造,后来思考一下微前端的本质,查询了不少资料,从qiankun微前端示例中学到了不少。 微前端的核心,似乎应该是一个基座应用(含登录页,layout页,404和首页等),多个子应用(任意框架,提供内部页面内容),下面就对这个思路…

stm32入门-----软件I2C读写MPU6050

目录 前言 MPU6050 1.简介 2.相关参数 3.硬件电路 4.MPU6050框图 C编程实现I2C读写MPU6050步骤 1.MyI2C.c文件 (1)引脚的宏定义 (2)对SCL和SDA的操作以及初始化 (3)起始信号标志 (4…

数据结构(面试)

目录 线索二叉树哈夫曼树并查集最小生成树最短路径拓扑排序二叉排序树平衡二叉树红黑树折半查找散列表堆排序归并排序 线索二叉树 原理:利用树节点的n1个左右空指针指向其遍历序列的前驱和后继(线索) 优点:简化遍历,不…

7.2 单变量(多->多),attention/informer

继续上文书写: 1 GRU Attention 收敛速度稳定的很多,你看这些模型是不是很容易搭,像积木一样; def create_model(input_shape, output_length,lr1e-3, warehouse"None"):input Input(shapeinput_shape)conv1 Conv…

【C++标准模版库】模拟实现vector+迭代器失效问题

模拟实现vector 一.vector成员变量二.构造函数1.无参(默认)构造2.有参构造3.拷贝构造1.传统写法2.现代写法 三.vector对象的容量操作1.size2.capacity3.clear4.empty5.reserve6.resize 四.vector对象的访问及遍历操作1.operator[]2.实现迭代器&#xff1…

免费【2024】springboot 大学生志愿者管理系统的设计与实现

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

windows下设置java环境变量

1.打开window的环境变量设置 右键开始菜单选择系统 选择高级系统设置: 点击环境变量 2.在系统变量 新增 JAVA_HOME;该变量的值 选择jdk所在的目录即可。 JAVA_HOME: D:\Program Files\Java\jdk1.8.0_131 3. 在系统变量新增 classpath; 该变量的值设置…

GoLang 安装

golang学习笔记 goland 安装 To use Go programming language in Visual Studio Code (VSCode), you can follow these steps: 1. Install Go: Download and install the latest version of Go from the official Go website (https://golang.org/dl/). 2. Install VSCode:…