C# 无参属性 set与get

C#属性与方法-set与get方法详解 阅读详情

一开始我们的对象是这样的

public sealed class Emplyee
{
    public string Name;
    public int Age;
}
然后为了数据不被破坏,所谓的数据封装,于是就成了这样:
public sealed class Emplyee
{
    private string _name;
    private int _age;

    public string GetName()
    {
        return _name;
    }
    public void SetName(string name)
    {
        this._name = name;
    }

    public int GetAge()
    {
        return _age;
    }

    public void SetAge(int age)
    {
        this._age = age;
    }
}

这样还带来了一个好处就是要设置年龄时,可在SetAge(int age)加条件,屏蔽不可能情况。

    public void SetAge(int age)
    {
        if(age < 0)
            throw new ArgumentOutOfRangeException("age", age.ToString(), "the age must be greater than or equal to 0");
        this._age = age;
    }


可是,问题来了,员工的资料内容好多,属性好多,怎么办。。。。。

东西一多,麻烦就来了

大微软说不用怕,早就给你设计好了AIP(automatically implemented property)

class Employee
{
    private string _name;
    private int _age;

    public string Name
    {
        get { return (_name); }
        set { _name = value; }
    }

    public int Age
    {
        get { return _age; }
        set
        {
            if(value < 0)
                throw new ArgumentOutOfRangeException("age", _age.ToString(), "the age must be greater than or equal to 0");
            _age = value;
        }
    }
}
是不是觉得略有方便。

那来说说不好的地方吧

1.任何类型只要含有一个AIP,就没办法对此类型的实例就行反序列化

2.调试时不能在AIP的set,get方法上加断点

几个注意事项:

1.属性方法可能抛异常,字段则永不会

2.属性不能作为out或ref参数传给方法,而字段可以,就像这样

class Employee
{
    private string _name;
    private int _age;

    public string Name
    {
        get { return (_name); }
        set { }
    }
}

public class TestClass
{
    void MethodWithOutParam(out string n) { n = null; }
    public TestClass()
    {
        Employee ee = new Employee();
        MethodWithOutParam(out ee.Name);
    }
}
机智的VS就会在ee.Name下面画出鲜红的波浪线

3.连续的调用,可能返回不同的值,因为这是方法


像那么做以后就可以这么申明对象了

Employee ee = new Employee() { Name = "jeff", Age = 45 };

如果调用的本来就是无参构造器,还可以这样

Employee ee = new Employee { Name = "jeff", Age = 45 };

甚至还可以这样

var ee = new { Name = "jeff", Age = 45 };
当然这时的ee也就不是Employee实例对象了

还有

var people = new[]
{
    new { Name = "ghost", Year = 1945 },
    new { Name = "fuck",  Year = 1954 },
    new { Name = "damn",  Year = 1938 },
};




C# 属性访问器get与set深入解析 在C#编程语言中,属性(Properties)是类(Class)或结构体(Struct)中一种用于封装数据的成员。它们在面向对象编程中扮演着极其重要的角色,通过提供公共的访问点来控制对私有字段(Fields)的读取和写入操作。与直接访问私有字段相比,使用属性可以保证数据的安全性与完整性,因为可以在属性的访问器中添加验证逻辑来控制字段值的设置和获取。属性的声明中包含访问器(Accessor),即get和set块,它们分别用于获取(读取)和设置(写入)属性值。 阅读详情

相关推荐

小案例:利用图床自动化批量上传图片并获取图片链接

用python爬虫写了一个小脚本,用来自动上传图片到图床,然后返回链接,我们只需直接复制链接就可以。(需要安装Requests库) 因为不同图床需要提交的POST表单不一致,所以在这里我用ImgURL图床做示范,如果大家有需求,可自行修改代码。使用脚本的时候,我们只需把需要上传的图片和这个脚本放在同一个文件夹中,然后运行脚本,稍作等待,看到提示时就可以在脚本运行文件夹中发现一个名为“图片链接地址.txt”的文件,里面就是图片链接啦! 四、图片链接地址.txt(单张图片):...

采菊东篱下,Python满乾坤! 4412

C#获取企业微信打卡数据

在涉及到获取第三方数据的时候都会涉及到调用接口,小编为此也是搜索了很长一段时间呢!https://www.cnblogs.com/BOSET/p/7089284.html这是小编参考的一份很完善的C#调用接口的博客,下面主要贴上小编主要使用的参考代码 using System; using System.Collections.Generic; using System.IO; using Sys...

weixin_43942765的博客 3619

Appsflyer S2S事件上报实战:从参数获取到避坑指南(附Firebase对比)

本文详细解析了Appsflyer S2S事件上报的实战技巧,包括核心参数获取、测试环境搭建、生产环境最佳实践以及高级场景处理。通过对比Firebase的事件上报机制,帮助开发者高效避坑并优化数据上报流程,提升应用分析与营销效果。

egg99的博客 885

C#中进行GET和POST API调用的方法

在GET请求中,我们使用GetAsync方法发送GET请求,并通过ReadAsStringAsync方法获取响应内容。在POST请求中,我们使用PostAsync方法发送POST请求,并将请求体以JSON格式发送。注意,这里使用了System.Text.Json命名空间中的JsonSerializer.Serialize方法来将对象转换为JSON字符串。在实际使用中,可以根据API的要求进行相应的参数配置,例如设置请求头、查询参数等。// 发送POST请求。// 发送GET请求。

BEN654776577的博客 1277

Windows 10/11系统下TurboDesign 6.4.0完整安装指南(附序列号+破解补丁)

本文提供Windows 10/11系统下TurboDesign 6.4.0的完整安装指南,涵盖系统环境预检、安装程序部署、序列号处理及破解补丁部署等关键步骤。通过详细的安装教程和优化配置,帮助用户高效完成这款涡轮机械设计软件的安装与调试,解决常见兼容性问题。

s4t5u6v的博客 1030

避坑指南:vmdk转qcow2镜像时你可能会遇到的5个问题及解决方法

本文详细解析了将VMDK虚拟机镜像转换为QCOW2格式时可能遇到的五大核心问题,特别是启动失败的常见原因及解决方案。内容涵盖格式差异、预处理优化、转换命令详解,并针对根文件系统挂载失败、GRUB引导失败、网卡识别、性能异常等典型故障提供了具体排查与修复步骤,旨在帮助运维人员高效、可靠地完成镜像迁移。

websocket5live的博客 275

C# API POST与GET的调用

WebClient与HttpWebRequest HttpClient没测试

qq1084517825的博客 1466

YOLOv11模型改进-模块-引入空间池化模块StripPooling 解决遮挡、小目标

本文介绍了一种新的空间池化策略,称为,用于场景解析。结构:包括两个平行路径,分别进行水平和垂直方向的条带池化,然后通过1D卷积层进行特征调整。:结合了条带池化和传统的空间池化,分别用于捕捉长距离和短距离的依赖关系。作用捕捉长距离依赖:通过长条形的池化窗口,有效捕捉分布离散的区域之间的关系。避免不相关信息干扰:窄条形的池化窗口有助于捕捉局部上下文,防止不相关区域干扰标签预测。提高场景解析性能:在多个基准数据集上,证明了这种方法能够显著提升场景解析的效果。

qq_64693987的博客 4205

C# 使用 API GET,POST 方法

C# 使用 API GET,POST 方法

qq_33416262的博客 1288

SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员

笔者在业余时间设计了这份 SAP UI5 学习教程,把开发一个完整的 SAP UI5 应用的流程,拆分成若干个步骤,力求每个步骤里,把涉及到的知识点都涵盖到。建议零基础或者对 SAP UI5 知之甚少的 SAP UI5 初学者,按照顺序从第一个步骤开始循序渐进地学习,把这些代码下载到本地,配合教程的文字讲解,自己动手,以加深理解。 对于已经有一定基础的 SAPUI5 开发人员,可以通过本文的目录,跳过前面一部分比较基础的章节,直接挑选对自己工作项目有关,或者包含某些知识点自己尚未掌握的章节来有针对性地学习。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3万+

大数据领域数据采集的人工智能辅助技术

在大数据时代,“数据是石油”的隐喻早已深入人心,但采集高质量数据的过程却像“在大海里捞针”——数据源分散如繁星、格式杂乱如碎片、质量参差不齐如泥沙,传统采集方法(写死的脚本、固定的ETL流程)早已力不从心。这篇文章将带你走进AI辅助数据采集的世界:我们会用“智能捕鱼船”的比喻拆解AI如何解决传统采集的痛点,深入解析“数据源自动发现”“自适应数据解析”“实时质量管控”等核心技术的原理,用代码示例还原AI采集的真实流程,最后探讨多模态采集、联邦学习等未来趋势。

小程序开发 2355

请问C#中get和SET到底是什么意思啊?

get set是用来扩展域的,也就是C里的变量,只是用起来更加灵活而己。看以下代码: using System; public class cls { private int book;//定义一个域(也可以叫变量,只是面向对像里都这么叫,使用起来也更加方便) public int Book { get { Console.WriteLine("dsf"); return book; } set

hunter的专栏 6698

大模型的应用与微调:如何调用 LLM?从 OpenAI API 到本地部署

本篇文章介绍了如何调用 OpenAI、DeepSeek、Manus、通义千问等大模型 API,并探讨了 LLM 本地部署的方法。在实际应用中,可以根据需求选择云端 API 或本地化部署方案,以满足不同的计算需求和隐私要求。下一篇:大模型微调与 RAG 技术(LoRA、QLoRA、向量数据库)

晴天彩虹雨的博客 1157

C#中的get和set方法与property (属性)

    在面向对象编程(OOP)中,是不允许外界直接对类的成员变量直接访问的,既然不能访问,那定义这些成员变量还有什么意义呢?所以C#中就要用set和get方法来访问私有成员变量,它们相当于外界访问对象的一个通道,一个“接口”。先来看一段代码: class Employee { private string name; private byte age; public string Name { get { retu

皮皮#2500 6590

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

第十章 属性

z属性 本章也比较简单稍作介绍: 无参属性就是我们常见的属性 可以封装属性、以线程安全方式访问 有参属性就是C#中的所引器 匿名类型 如图遇到如下代码 具体点就是: 上面的注释也已经讲清楚了,定义的类型之后,构造实例,然后初始化属性。现在详细说下 编译器接收到 上图代码,先用var 定义一个类型,但是不具体指定什么类型,完全由后面的...

weixin_33672109的博客 108

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【转】跟小静读CLR via C#(11)-无参属性、索引器

提起属性,我们都不陌生。它用起来就像访问public数据成员一样,但实际上是调用了内部定义的相应方法。通过使用属性保持了较好的数据封装,而且访问很方便,接下来我们共同复习以下CLR允许定义的两种属性:无参属性和有参属性(索引器)。 一、 无参属性 1. 定义属性 无参属性就是我们最常见的属性方式,在赋值时可以加入一定的逻辑判断。属性的定义其实不复杂,先看个直观的例子: ...

weixin_30467087的博客 93

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C#_构造器、属性、索引器

——构造器(构造函数): 如果程序员没有显示声明一个构造函数,程序会自动生成一个无参构造函数。 类的实例构造函数:不能有返回值(连void都不能写),与类名一样。 类的静态构造函数:不仅不能有返回值,而且不能加修饰符(它默认只能是private),不能带参数(默认只能是无参构造函数)。 class A {   public A(){} //类A的无参构造函数   publ

chenlaoyang的专栏 5838

C#结构体与索引器

本文摘要: 结构体是值类型的复合数据类型,类似简化版类,可包含字段、属性和方法,但存在限制:必须全属性初始化有参构造、不可继承、不能声明初始化字段属性。与类的关键区别在于值类型/引用类型差异。 索引器通过this[]语法实现类/结构的索引访问,支持get/set逻辑处理,可重载不同参数类型(如int/string)。示例展示了通过整数索引直接访问集合元素,以及通过字符串索引实现按名称查找的功能,体现类似字典的灵活访问方式。两者均为C#中提升数据封装性的重要特性。

2603_96691787的博客 139

260121C#类、封装学习笔记

无参构造快捷方式ctor。

m0_73373492的博客 135

JavaBean理解

Java语言欠缺属性、事件、多重继承功能。所以,如果要在Java程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码。Java Bean正是编写这套胶水代码的惯用模式或约定。这些约定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。遵守上述约定的类可以用于若干工具或库。 举个例子,假如有人要用Java实现一个单向链表类,可能会这样写...

110

C#中{get;set;}

http://blog.sina.com.cn/s/blog_82526aa60100txtx.html 在程序中经常碰到get、set,不甚明白,在网上查询时也说的迷迷糊糊,所以整理下,以学的明白透彻点。 有两个类person: public class person { public string name; } public class person { public ...

qq_40091720的博客 5万+

C#的get和set用法

转自 https://www.cnblogs.com/zhangtaotqy/p/7998543.html 我们在学习C#语法的属性时,都要首先和GET,SET访问器打交道,从英文的字面意思上理解,GET应该就是获得什么什么,而SET应该是设置什么什么,那我们看一下,官方是怎么定义这对访问器的:get是读取属性时进行的操作,set是设置属性时进行的操作。定义一个属性如果只有get,这个属性就是只读...

alexhu2010q的博客 3万+

C#中的get和set用法

一、get、set 的基本简介 1、有两个person类如下: public class person1 { public string name; } public class person2 { public string Name{set;get;} } 第一个类型的name属性未封装,其name属性直接通过public关键字暴露给系统中的其他类了。而第二...

Jeffxu_lib的博客 1万+

C#中Get和Set的用法

转自https://blog.youkuaiyun.com/alexhu2010q/article/details/87895274 首先搞清楚get和set有什么用,在面向对象编程里面,有的类的数据是私有的,是封装起来的,所以为了读取和写入对应的私有数据,c#采用了关键字get和set,其中get负责读取私有数据,set负责写入私有数据,但这两种用法应该并不绝对,我见过在get里面进行写入操作的。 我们在学习C#语法的属性时,都要首先和GET,SET访问器打交道,从英文的字面意思上理解,GET应该就是获得什么什么,而

m0_48520385的博客 9626

C#中get和set

属性的访问器包含与获取(读取或计算)或设置(写)属性有关的可执行语句。访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。声明采用下列形式之一: get {} set {} get 访问器 get 访问器体与方法体相似。它必须返回属性类型的值。执行 get 访问器相当于读取字段的值。 get 访问器必须在 return 或 throw 语句中终止,并且控制不能超出访问器体。 se...

热爱生活、热爱技术、热爱记录~ 5731
上一篇: C# 并发队列ConcurrentQueue
下一篇: C# 泛型约束
conquerwave
博客等级 码龄18年 57粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值