c# 字段和属性(get、set、init)

基本概念:

  • “字段”就是类内成员变量,一般为了隐藏数据,保护数据,实现对外不可见,体现封装的思想,成员变量都声明为私有变量;
  • “属性”是类内的一种成员,它是一种特殊的方法(方法的意思和函数差不多意思),被称为“访问器”,专门用于处理私有字段的访问和赋值(字段就是成员变量);
  • “get、set、 init”在属性的内部,体现访问器的类型;如果属性包含get、set那么就是读-写访问器(也叫读写属性),如果只有get,那么就是只读访问器(也叫只读属性);只有set是只写访问器(也叫只读属性);init访问器比较特殊,要求类在初始化时设置字段的值,而且init会在初始化后强制字段不可再更改,就是初始设置字段的值后就不能再用set给字段赋值,值得注意的是set与init访问器无法同时存在属性中;

个人理解:

访问器用来安全地操作私有成员变量。

虽然可以用类内公有函数实现私有变量地获取(这是一般用来获取和修改私有成员变量地方法),但是相较于访问器来说,过于繁琐;

微软文档是这样描述:

属性是一种成员,它提供灵活的机制来读取、写入或计算私有字段的值。 属性可用作公共数据成员,但它们是称为“访问器”的特殊方法。 此功能使得可以轻松访问数据,还有助于提高方法的安全性和灵活性。

总的来说,访问器就是访问私有成员变量的公开成员函数的优化版;


访问器的默认写法:

类内属性和字段的一般形式 :

如果没有特殊需求,比如不想在get内实现一些特殊需求,只是想要获取私有变量的值,用默认写法方便快捷(set,init同样有默认写法);

上面的程序等效于:

很多工程源码都会使用这种访问器的默认写法;


set与init无法共存:

在属性中同时实现set和init会报错:属性访问器已经定义

可能就是因为init后无法再给字段赋值也就不能调用set;

init:

可以在类的初始化时给字段赋值,也可以不赋值。

在类的初始化时,不给字段赋值:

在类的初始化时,给字段赋值:

注意:当要在初始化时给字段赋值时,要在花括号内实现;


必须在类的实例化时给字段赋值的情况(require属性):

官方文档里的原文内容:

必需的属性

从 C# 11 开始,可以添加 required 成员以强制客户端代码初始化任何属性或字段:

C#复制

public class SaleItem
{
    public required string Name
    { get; set; }

    public required decimal Price
    { get; set; }
}

若要创建 SaleItem,必须使用对象初始值设定项设置 Name 和 Price 属性,如以下代码所示:

C#复制

var item = new SaleItem { Name = "Shoes", Price = 19.95m };
Console.WriteLine($"{item.Name}: sells for {item.Price:C2}");

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件被删除了怎么恢复?3个宝藏方法,快来get!

“我是一个学生党,期末的一些资料保存在电脑上,但是不知道是不是被我误删了,导致很多文件都找不到了。文件被删除了怎么恢复呢?大家帮我出出主意吧!” 对于经常在电脑上保存各种文件的用户来说,文件误删除是…

万宾科技荣获2023物联网场景应用品牌企业创始人发表专题演讲

12月5日-6日由雄安新区管理委员会、中关村发展集团股份、物联中国团体组织联席会主办,全国33家物联网协会协办的2023物联网产业品牌大会于在雄安新区顺利召开。本次大会以“物联中国.数智雄安”为主题,邀请到科技部原副部长吴忠泽,雄安新区管…

MIT线性代数笔记-第25讲-复习二

目录 25.复习二打赏 25.复习二 已知 a ⃗ [ 2 1 2 ] \vec{a} \begin{bmatrix} 2 \\ 1 \\ 2 \end{bmatrix} a ​212​ ​,求: (1) a ⃗ \vec{a} a 的投影矩阵 (2) a ⃗ \vec{a} a 的投影矩阵的特征值和特征向量 A n s Ans Ans:(1) P a ⃗…

【面试】Java最新面试题资深开发-JVM第二弹

问题三:JVM 内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为 Eden 和 Survivor 为什么要分成新生代和老年代: 对象生命周期假设: 大多数对象在被创建后很短时间内就会变成垃圾。通过将这些短命的对象放入…

代码混淆技术探究与工具选择

代码混淆技术探究与工具选择 引言 在软件开发中,保护程序代码的安全性是至关重要的一环。代码混淆(Obfuscated code)作为一种常见的保护手段,通过将代码转换成难以理解的形式来提升应用被逆向破解的难度。本文将介绍代码混淆的概…

vue2+datav可视化数据大屏(2)

接上一节所说 我们已经讲骨架搭好 这节我们讲述的如何在vue2中使用mock数据和封装axios 1,项目中使用moke 📓什么是mock?,mock就是假数据,除了数据是假的,其他内容都和正常工作中后端开发的接口都是一致的…

3.PyTorch——常用神经网络层

import numpy as np import pandas as pd import torch as t from PIL import Image from torchvision.transforms import ToTensor, ToPILImaget.__version__2.1.13.1 图像相关层 图像相关层主要包括卷积层(Conv)、池化层(Pool)…

KP 2sv Authenticator一款免费处理亚马逊两步验证码的软件

KP 2sv Authenticator 被誉为一款免费而强大的亚马逊两步验证软件,操作简便轻松。 软件使用方法极为简单,用户只需直接输入身份验证应用程序生成的代码,即可迅速生成随机验证码,帮助用户顺利完成亚马逊的两步验证流程。这款小软件…

dockers安装rabbitmq

RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQhttps://www.rabbitmq.com/ Downloading and Installing RabbitMQ — RabbitMQ docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management 之后参照:dock…

基于个微机器人的开发

简要描述: 下载消息中的动图 请求URL: http://域名/getMsgEmoji 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明…

【EXCEL】折线图添加垂直x轴的竖线|画图

相关链接:excel 添加垂直竖向直线 如何在Excel中添加水平和垂直线? 因为加辅助列有点不习惯,已经有分位数横坐标了,想着试下用散点图的误差线画 效果图: 步骤: s1:随便框选两列数据–>插入(…

Android hook式插件化详解

引言 Android插件化是一种将应用程序的功能模块化为独立的插件,并动态加载到主应用程序中的技术。通过插件化,开发者可以将应用程序的功能分解成独立的模块,每个模块可以作为一个插件单独开发、测试和维护,然后通过动态加载的方式集成到主应用程序中,实现功能的动态扩展和…

香港云服务器:全面介绍与使用场景分析

这几年基于国内互联网技术的发展,各类海外贸易的兴起,很多网站都启用了海外云服务。这其中,香港的 IDC 市场异常火爆。也不奇怪,就目前来看,国内大多数网站的访问用户在国内外均有涉及,而香港云服务器恰好满…

linux云服务器开启防火墙注意事件

重要的事情先说三遍: linux云服务器开启防火墙要先获取到云服务器的管理界面控制权!! linux云服务器开启防火墙要先获取到云服务器的管理界面控制权!! linux云服务器开启防火墙要先获取到云服务器的管理界面控制权!! 也就是能打开这个页面: 为什么这么说呢?如果你…

最长连续序列(leetcode 128)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一:排序方法二:哈希表 5.实现示例参考文献 1.问题描述 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你…

服务器RAID系统的常见故障,结合应用场景谈谈常规的维修处理流程

常见的服务器RAID系统故障包括硬盘故障、控制器故障、电源故障、写入错误和热插拔错误。下面结合这些故障的应用场景和常规维修处理流程来详细讨论: 硬盘故障: 应用场景:在服务器RAID系统中,硬盘故障是最常见的问题之一。硬盘可能…

JavaSE基础50题:10. 计算1/1-1/2+1/3-……+1/99-1/100的值(两种方法)

概述 计算1/1 - 1/2 1/3 - …… 1/99 - 1/100的值。 当分母为偶数时,符号是负的,放分母为奇数时,符号是负的。 方法一 用 flg 做了一个正负交替 【代码】 public static double func() {double sum 0;int flg 1; //设置正负号的for (i…

【Python】Python音乐网站数据+音频文件数据抓取(代码+报告)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

优化 SQL 日志记录的方法

为什么 SQL 日志记录是必不可少的 SQL 日志记录在数据库安全和审计中起着至关重要的作用,它涉及跟踪在数据库上执行的所有 SQL 语句,从而实现审计、故障排除和取证分析。SQL 日志记录可以提供有关数据库如何访问和使用的宝贵见解,使其成为确…

住宅ip和机房ip的区别

随着互联网的普及,越来越多的人开始接触网络,而IP地址则是网络中不可或缺的一部分。在日常生活中,我们常常会听到住宅IP和机房IP这两个概念,那么它们之间有什么区别呢? 首先,让我们了解一下什么是住宅IP和…