news 2026/4/18 7:57:04

C#属性访问器Set与Get详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#属性访问器Set与Get详解

属性 Set 和 Get 访问器总结

一、核心概念对比

概念定义作用访问权限示例
字段private string name;存储数据通常私有private int age;
属性public string Name { get; set; }访问数据通常公有public int Age { get; set; }

二、属性的三种写法

1.完整写法(原始写法)

csharp

private string _name; // 私有字段 public string Name // 公有属性 { get { return _name; // 返回字段值 } set { _name = value; // 设置字段值 } }

2.简化写法

csharp

// 如果只是简单传递值,可以简化 private int _id; public int Id { get { return _id; } set { _id = value; } }

3.自动属性(语法糖)

csharp

// 编译器自动生成私有字段 public bool Sex { get; set; } public int Age { get; set; }

三、Set 和 Get 访问器的本质

Set 访问器

csharp

// 本质:一个设置值的方法 public string Name { set // 相当于:public void SetName(string value) { _name = value; // value 是用户传入的值 } } // 使用:p.Name = "张三"; // 相当于:p.SetName("张三");

Get 访问器

csharp

// 本质:一个获取值的方法 public string Name { get // 相当于:public string GetName() { return _name; } } // 使用:string name = p.Name; // 相当于:string name = p.GetName();

四、访问器的实际应用(重要)

1.添加验证逻辑

csharp

private int _age; public int Age { get { return _age; } set { if (value < 0 || value > 200) throw new Exception("年龄必须在0-200之间");//做一个限定值 不在值内报异常 _age = value; } }

2.添加额外逻辑

csharp

private string _name; public string Name { get { Console.WriteLine("获取Name值"); return _name + " 视觉67班"; // 返回时添加额外信息 } set { Console.WriteLine($"设置Name值: {value}"); _name = value; } }

3.只读或只写属性

csharp

// 只读属性(只有get) public string Id { get; } = Guid.NewGuid().ToString(); // 私有set public string Name { get; private set; } // 只写属性(不常见) private string _secret; public string Secret { set { _secret = value; } }

六、为什么要用属性而不是字段

1.数据封装

csharp

// ❌ 不好:直接暴露字段 public int Age; // 外部可以直接设置为负值 // ✅ 好:通过属性控制 private int _age; public int Age { get { return _age; } set { if (value >= 0 && value <= 150) _age = value; } }

2.向后兼容

csharp

// 第一版:直接使用字段 public int Score; // 第二版:改为属性,添加验证 private int _score; public int Score { get { return _score; } set { if (value >= 0 && value <= 100) _score = value; } } // 外部代码无需修改,仍然使用 obj.Score

3.数据绑定支持

csharp

// WPF、WinForms 等 UI 框架支持属性绑定 public string UserName { get; set; } // 可以绑定到 TextBox

八、常见错误

❌ 错误1:无限递归

csharp

public string Name { get { return Name; } // ❌ 递归调用自身 set { Name = value; } // ❌ 递归调用自身 } // ✅ 正确:引用字段 public string Name { get { return _name; } // ✅ set { _name = value; } // ✅ }

❌ 错误2:忘记字段

csharp

public int Score { get { return ???; } // ❌ 没有字段可返回 set { ??? = value; } // ❌ 没有字段可赋值 } // ✅ 正确:先定义字段 private int _score; public int Score { get { return _score; } set { _score = value; } }

九、一句话总结

字段存储数据要私有,属性访问数据要公有。Set 是设置值的方法,Get 是获取值的方法。需要验证用完整属性,简单情况用自动属性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 9:40:50

我靠?!程序员这样使用AI才对!!!

放假前最后一个工作日下午5点&#xff0c;你鼠标都摸好了&#xff0c;就等着准点开溜。产品经理走过来了&#xff1a;“有个小需求&#xff0c;用户列表加个筛选和排序&#xff0c;很简单&#xff01;老板说客户明天就要看。”你嘴上说着好的&#xff0c;心里已经演完了八百集血…

作者头像 李华
网站建设 2026/4/17 14:07:20

学习速度 =(理解深度 × 迁移能力)÷ 无效时间。 减少无效消耗,让大脑走“高速路” (稳定的高能状态 + 清晰的内部结构 + 即时的行动回路)

学习慢&#xff0c;不是大脑慢&#xff0c;是路烂。 修路靠结构和使用&#xff0c;不靠天赋。路是一种结构化&#xff0c;构建平坦结构&#xff0c;减少干扰与摩擦。 看了不做 → 路不修 学了不用 → 路荒废 允许“半懂就用”&#xff0c;马上就用。不要卡在完美主义。一句话总…

作者头像 李华
网站建设 2026/4/18 5:21:19

4、Linux网络硬件配置全解析

Linux网络硬件配置全解析 1. 网络硬件基础概念 在Linux系统中,要理解网络硬件的工作原理,首先得了解几个关键概念:物理设备、设备驱动和接口。 - 物理设备 :像以太网、FDDI或令牌环网卡这类硬件,是插在PC插槽里、布满各种小芯片的电路板,这就是所谓的物理设备。 - …

作者头像 李华
网站建设 2026/4/16 3:35:02

8、Linux 中 SLIP 协议的使用与配置

Linux 中 SLIP 协议的使用与配置 1. 引言 在网络通信中,数据包协议(如 IP 或 IPX)依赖于接收主机知道每个数据包在数据流中的起始和结束位置,这种标记和检测数据包起始和结束的机制称为定界。以太网协议在局域网环境中管理这种机制,而 SLIP 和 PPP 协议则用于串行通信线…

作者头像 李华
网站建设 2026/4/17 14:50:33

12、Linux 网络中的 IP 伪装与地址转换技术详解

Linux 网络中的 IP 伪装与地址转换技术详解 1. 网络现状与 IP 伪装的诞生 曾经,只有大型组织才有能力构建局域网将多台计算机连接在一起。但如今,网络技术成本大幅下降,带来了两个显著变化。一方面,局域网变得极为普遍,即使在许多家庭环境中也随处可见,不少 Linux 用户…

作者头像 李华
网站建设 2026/4/18 7:41:07

15、Linux 网络文件系统(NFS)使用与配置指南

Linux 网络文件系统(NFS)使用与配置指南 1. NFS 简介 网络文件系统(NFS)可能是使用远程过程调用(RPC)的最突出的网络服务。它允许用户以访问本地文件的相同方式访问远程主机上的文件。客户端通过内核支持和用户空间守护进程的组合,以及服务器端的 NFS 服务器来实现这一…

作者头像 李华