C#属性 Property

属性Property不是变量。 它们是由名为访问器方法来实现的一种方法。

实例属性表示的是实例的某个数据,通过这个数据反映实例当前的状态

静态属性表示的是类型的某个数据,通过这个数据反映类型当前的状态

意义:

防止恶意赋值(通过属性间接访问字段,对字段的一种保护),通过在Get和Set访问器函数中增加一些限制,对赋值进行合法检验防止污染字段。

语法(糖):

自动实现的属性

如果在访问器中没有任何附加逻辑可写成语法糖的样式。与一个共有字段没区别,不受保护,一般用在传递数据的类(即不需要取改的类,只传递)

属性进化史

未对字段进行保护

添加属性保护字段

由于赋值和取值的两个方法很冗余不如直接给变量赋值的清晰,因此MS创造了“属性”一概念

简洁多了,赋值从stu1.SetAge(10)变成stu.Age = 10;取值从stu1.GetAge()变成stu1.Age

属性的初始化

隐藏字段

 如果没有显式声明属性对应的字段,直接声明属性,编译器会自动生成的隐藏字段

访问控制

PS:同一类内的属性之间,无论什么修饰符,都可以互相访问到。

属性可以是读-写属性(既有 get 访问器又有 set 访问器)

只读属性(有 get 访问器,但没有 set 访问器)只读是针对类外的,类外因为字段被private的modifier修饰,因此只能通过属性访问字段,而类内不受private影响可以不通过属性访问字段

只写访问器(有 set 访问器,但没有 get 访问器)。 只写属性很少见

set 访问器有两个特殊的访问修饰符:

  • set 访问器可以将 init 作为其访问修饰符。 只能从对象初始值设定项或类型的构造函数调用该 set 访问器。 它比 set 访问器上的 private 更严格。
  • 自动实现的属性可以在不使用访问器的情况下set声明get访问器。 在这种情况下,编译器只允许从类型的构造函数调用 set 访问器。 它比 set 访问器上的 init 访问器更严格。

不写set和将set用private修饰是不同的效果:

1.不写set:无论类内外给属性赋值,报错只读属性不能被赋值。类内也依然可以改变其值,因为不受private影响而绕开属性,直接给字段赋值即可

2.写set但用private修饰:如果从声明这个字段的类外访问会报错:set访问器不可访问。setter不能从类外部访问,只能从类内部访问,可通过类内对Age进行赋值

抽象属性(Abstract Properties)

抽象类可拥有抽象属性,这些属性应在派生类中被实现。下面的程序说明了这点:

using System;
namespace Runoob
{public abstract class Person{public abstract string Name { get; set; }public abstract int Age { get; set; }}class Student : Person{// 声明自动实现的属性public string Code { get; set; } = "N.A";public override string Name { get; set; } = "N.A";public override int Age { get; set; } = 0;public override string ToString(){return $"Code = {Code}, Name = {Name}, Age = {Age}";}}class ExampleDemo{public static void Main(){// 创建一个新的 Student 对象Student s = new Student{Code = "001",Name = "Zara",Age = 9};Console.WriteLine("Student Info:- {0}", s);// 增加年龄s.Age += 1;Console.WriteLine("Student Info:- {0}", s);Console.ReadKey();}}
}

Reference

擅码网面向对象基础之字段属性

刘铁猛C#教程

属性 - C# | Microsoft Learn

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【力扣热题100】[Java版] 刷题笔记-121. 买卖股票的最佳时机

题目:121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。…

Wi-Fi7 puncturing技术增强与应用

原文关注公众号 - 无线技术栈,及时查看网络/Wi-Fi更多知识 “本文图片没有一一列出,感兴趣可以关注公众号 - 无线技术栈” “本文图片没有一一列出,感兴趣可以关注公众号 - 无线技术栈” Puncturing是一种有效的编码技术,广泛应用于无线通信中,用于在保持信号的可靠性的同…

C语言内存函数介绍和模拟实现:(memcpy,memmove,memcmp,memset)

memcpy介绍及模拟实现: memcpy介绍: void* 是指可以接受任何类型的指针。 memcpy是把从 source 指针开始之后的 num 个字节的内存拷贝到 destination 指针之后的空间。 遇到‘\0’不会停止,而且memcpy不可以拷贝重叠空间,就是说…

浏览器指纹修改指南2024 - 修改Geolocation API指纹(十一)

引言 在前几篇文章中,我们已经详细探讨了Geolocation API的定义、作用及其在浏览器指纹中的重要性,并深入分析了Chromium源码中Geolocation API的实现位置和修改方法。通过这些分析,我们为后续的修改工作奠定了坚实的基础。 在本篇文章中&a…

【微信小程序】基本语法

一、导入小程序 选择代码目录 项目配置文件 appid 当前小程序的 AppIDprojectname 当前小程序的项目名称 变更AppID(视情况而定,如果没有开发权限时需要变更成个人的 AppID) 二、模板语法 在页面中渲染数据时所用到的一系列语法叫做模板…

数据结构:顺序表

顺序表 顺序表的概念与结构静态顺序表动态顺序表 动态顺序表的实现SeqList.h的创建初始化动态顺序表(LS_Init)动态顺序表的销毁(LS_Destry)检查动态内存空间是否已满(SL_CheckCapacity)动态顺序表打印有效数…

MySQL_数据类型建表

复习: 我们昨天学习的知识都忘了嘛?如果忘了也不要担心,我来带大家来复习一遍吧!!! 1.查看所有数据库 show databases;2.创建属于自己的数据库 create database 数据库名; 检查自己创建的数据库是…

PHP不良事件上报系统源码,医院安全不良事件管理系统,基于 vue2+element+ laravel框架开发

不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”,结合预存上百套已正在使用的模板,帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件、意…

在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序

如果您有 Android 设备,您可能会将个人和专业的重要文件保存在设备的 SD 卡上。这些文件包括照片、视频、文档和各种其他类型的文件。您绝对不想丢失这些文件,但当您的 SD 卡损坏时,数据丢失是不可避免的。 幸运的是,您不需要这样…

实战:看懂并分析执行计划——Nested Loops (Inner Join)

这是执行计划中 Nested Loops 的详情信息,下面将逐行解释每个字段的含义,并提供优化思路。 Nested Loops 分析 Physical Operation: Nested Loops (Inner Join) 物理操作,表示这是一个嵌套循环连接(Nested Loops),用于执行 INNER JOIN。嵌套循环通常用于小数据集的连接…

Meta Llama3用于药物发现的微调、RAG 和提示工程-LLM保姆级资料

Meta Llama3用于药物发现的微调、RAG 和提示工程的使用指南:LLM微调的基本概念,每种微调方式的深入解读,2种生物医药领域的Llama3的微调应用。 LLM 如何微调LLMs?3种微调方式,什么时候?什么情况下该使用何…

如何通过 PXE 使用 UEFI 启动 Tiny Core Linux

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

根据关键字搜索商品API返回值解析:深入解析与代码实践

在电子商务和数据集成领域,API(应用程序编程接口)扮演着至关重要的角色。通过API,开发者可以访问和利用平台的数据资源,实现自动化和智能化的数据交互。本文将探讨如何根据关键字搜索商品API的返回值进行解析&#xff…

Python http打印(http打印body)flask demo(http调试demo、http demo、http printer)

文章目录 代码解释 代码 # flask_http_printer.pyfrom flask import Flask, request, jsonify import jsonapp Flask(__name__)app.route(/printinfo, methods[POST]) def print_info():# 分隔符separator "-" * 60# 获取请求头headers request.headers# 获取 JS…

「C/C++」C/C++ STL 之 迭代器

✨博客主页何曾参静谧的博客📌文章专栏「C/C++」C/C++程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明「…

大模型微调,使用QLoRA和自定义数据集微调大模型(下)

4.8 数据预处理 在微调模型之前,我们不能直接使用原始数据集,需要将数据集中的提示转换成模型能够理解的格式。 为了使数据集适配微调流程,这里编写辅助函数来格式化输入数据集。具体来说,就是将对话摘要(即提示-响应…

【NOIP普及组】质因数分解

【NOIP普及组】质因数分解 C语言代码C代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。 输入 输入只有一行,包含一个正整数…

js--高阶函数之参数归一化

一、前言 参数归一化:是我们软件开发里一个非常重要且实用的技巧,用的好极大简化代码同时提升代码的可阅读性和可维护性。以下我用日期格式化为例,演示一下参数归一化的技巧。 二、日期格式化实例 /*** 辅助格式化函数* param {string|functi…

均值、期望、方差、标准差与协方差:基础概念解析

均值、期望、方差、标准差与协方差:基础概念解析 在统计学和数据分析中,均值、期望、方差、标准差和协方差是描述数据分布和关系的基本工具。理解这些概念有助于我们更好地分析和处理数据。本文将详细讲解这些概念的定义、计算方法及其在实际应用中的意…

shell基础

一、理解bash基础 默认的Linux shell——Bash(Bourne Again SHell)可以通过命令控制系统,执行文件操作,或者启动应用程序。它可以在命令行上交互式使用,或者你可以创建一个包含多个shell命令的文件,并像启…