C#对象和类型

news2024/11/16 18:59:02

属性、方法、字段

 


字段和属性的区别

在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.coloradmin.cn/o/1975428.html

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

相关文章

组合优化与凸优化相关算法 Julia实现

线性规划 方法有单纯形法(简单,非多项式),椭圆法(复杂,多项式,仅有理论价值),内点法(非多项式,实际效率高)。 以例子说明&#xff0…

C++第五篇 类和对象(下) 初始化列表

目录 1.再探构造函数 2.类型转换 3.static成员 4.友元 friiend 1.再探构造函数 (1).之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒…

[Spring] SpringBoot统一功能处理与图书管理系统

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

分销商城小程序系统如何开发

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 前端开发:vue.js 可选语言:pythonjavanode.jsphp均支…

EDI是什么:EDI系统功能介绍

EDI全称Electronic Data Interchange,也被称为“无纸化贸易”。EDI实现企业间(B2B)自动化通信,帮助贸易伙伴和组织完成更多的工作、加快物流时间并消除人为错误。 EDI遵从国际报文标准,使得业务数据按照结构化或是标准…

音频文件怎么转换成mp3?这5种方法快速转换

音频文件格式繁多,从WAV到FLAC,从AAC到OGG,每一种都有其独特的优势和应用场景。但当我们需要将音频文件分享给朋友、上传到网络平台或进行跨设备播放时,MP3格式因其广泛的兼容性和较小的文件体积,往往成为首选。给大家…

「字符串」实现Trie(字典树|前缀树)的功能 / 手撕数据结构(C++)

概述 在浏览器搜索栏里输入几个字,就弹出了以你的输入为开头的一系列句子。浏览器是怎么知道你接下来要输什么的? 来看看字典树干了什么。 字典树是一种高效记录字符串和查找字符串的数据结构。它以每个字符作为一个节点对字符串进行分割记录&#xff0c…

48 集合应用案例

编写代码时除了要准确地实现功能之外,还要考虑代码的优化,尽量找到一种更快、更好的方法实现预定功能。Python 字典和集合都使用哈希表来存储元素,元素查找速度非常快,关键字 in 作用于字典和集合时比作用于列表要快得多。 impor…

【数据结构之单链表的实现(不带头)】

1.单链表 1.1概念与结构 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。 可以用下图便于理解 节(结)点: 与顺序表不同的是,链表里面的每节“车…

三十种未授权访问漏洞合集

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…

百度飞桨 OCR识别

百度飞桨 OCR识别代码 import warnings import time import cv2 as cv import paddlehub as hub # Load the image img cv.imread("1.jpg") height, width, channels img.shape imglist [img] ocr hub.Module(name"ch_pp-ocrv3", enable_mkldnnTrue) …

从Axure入门,开始了解产品

​不少想要求职产品经理的小伙伴在问一个问题:我是一个纯小白,一点基础都没有,我该如何入门产品呢?当然想要入门产品,很多人都有自己的一套方法,这里推荐其中的一种方法,从原型工具,…

ModuleNotFoundError: No Module Named openai

题意:Python 无法在环境中找到名为 openai 的模块 问题背景: import requests from bs4 import BeautifulSoup import openai #write each line of nuclear.txt to a list with open(nuclear.txt, r) as f:lines f.readlines()#remove the newline cha…

Spring源码-ClassPathXmlApplicationContext的refresh()都做了什么?

AbstractApplicationContext的refresh方法 /*** 用给定的父类创建一个新的ClassPathXmlApplicationContext* Create a new ClassPathXmlApplicationContext with the given parent,* 从给定的XML文件加载定义* loading the definitions from the given XML files.* param confi…

UE5 从零开始制作跟随的大鹅

文章目录 二、绑定骨骼三、创建 ControlRig四、创建动画五、创建动画蓝图六、自动寻路七、生成 goose八、碰撞 和 Physics Asset缺点 # 一、下载模型 首先我们需要下载一个静态网格体,这里我们可以从 Sketchfab 中下载:Goose Low Poly - Download Free …

十条线路:畅享张北草原天路玩法

2024年6月6日,张家口市政府新闻办召开新闻发布会,发布10条草原天路精品旅游线路,同时就草原天路今年改造提升重点工作进行介绍。其中,10条精品旅游线路包含5条玩转天路经典线路和5条穿越天路新玩法线路。 1、寻“天路之巅”网红打…

Java并发编程 使用锁和状态位来控制线程的执行顺序

Java线程生命周期的认识 对于线程的生命周期,在Java和操作系统中,在概念上有一点小小的不同。 在操作系统层面上,线程的生命周期如下: 1.新建 2.就绪 3.阻塞 4.运行 5.终止 而在Java层面上,则把线程的阻塞状态又划分…

详细分析Flask部署云服务器(图文介绍)

目录 前言1. 安装配置2. 代码部署3. 服务配置4. 自启动前言 Nginx信息补充阅读: Nginx从入门到精通(全)Nginx配置静态网页访问(图文界面)本文着重提供思路逻辑 1. 安装配置 最好的方式是安装docker,通过docker安装nginx,推荐阅读:Docker零基础从入门到精通(全)包环…

与用户有关的接口

1.获取用户详细信息 跟着黑马程序员继续学习SpringBoot3Vue3 用户登录成功之后跳转到首页,需要获取用户的详细信息 打开接口文档 使用Token令牌解析得到用户名 我们需要根据用户名查询用户,获取详细信息 但是请求参数是无,由于都需要携…

标题生成器:开启创意写作的新篇章

文章目录 角色与目标标题生成器的功能标题生成器的优势指导原则限制与澄清应用场景对创意写作的影响智能体发布到微信公众号配置公众号菜单配置自动回复自动回复文本链接自动回复二维码图片 标题生成器的未来发展总结 博主介绍:全网粉丝10w、CSDN合伙人、华为云特邀…