c#属性访问器

在c#中属性访问器是用于封装字段的方法,访问器分为get和set,用于获取和设置属性的值,通过属性访问器,开发人员可以控制如何读取和修改属性值,提供更好的封装性和数据验证。

1,基本的属性访问器

属性是通过get和set关键字定义的

Set访问器用于读取属性值

Get访问器用于设置属性值

例:

public class Person

{

private string name;

// 属性

public string Name

{

get

{

return name; // 获取值

}

set

{

name = value; // 设置值

}

}

}

Person person = new Person();

person.Name = "Alice"; // 调用 set 访问器

Console.WriteLine(person.Name); // 调用 get 访问器,输出: Alice

通过直接调用Name方法就可以获取或者设置name的值,这个就是属性访问器

2,自动实现的属性

C#还支持自动实现的属性,即不需要手动声明字段,编译器会自动为get和set生成一 个隐藏的字段

例:

public class Person

{

public string Name { get; set; } // 自动实现的属性

}

这等同于

public class Person

{

private string name; // 自动生成的字段

public string Name

{

get { return name; }

set { name = value; }

}

}

自动属性简化了代码,并且通常用于不需要复杂逻辑的属性

3,只读属性

如果只希望属性是只读的(即没有set访问器),可以只提供get访问器

例:

public class Person

{

private string name;

public string Name

{

get { return name; }

}

public Person(string name)

{

name = name;

}

}

Person person = new Person("Alice"); //构造函数赋值

Console.WriteLine(person.Name); // 输出: Alice

// person.Name = "Bob"; // 编译错误,Name 是只读的

4,只写属性

只提供set访问器

例:

public class Person

{

private string name;

public string Name

{

set { name = value; }

}

}

Person person = new Person();

person.Name = "Alice"; // 设置值

// Console.WriteLine(person.Name); // 编译错误,没有 get 访问器

5,计算属性

属性也可以用来返回一个计算值,而不是直接返回一个字段,计算属性可以用get访问 器实现

例:计算矩阵面积

public class Rectangle

{

public int Width { get; set; }

public int Height { get; set; }

// 计算属性

public int Area

{

get { return Width * Height; }

}

}

Rectangle rect = new Rectangle { Width = 5, Height = 10 };

Console.WriteLine(rect.Area); // 输出: 50 (5 * 10)

6,属性访问器中的代码逻辑

也可以在get或set访问器中添加逻辑,比如验证输入值,计算返回值,抛出异常等

例:验证设置的值

public class Person

{

private int age;

public int Age

{

get { return age; }

set

{

if (value < 0)

{

throw new ArgumentException("年龄不合法!");

}

age = value;

}

}

}

Person person = new Person();

person.Age = 25; // 正常设置

Console.WriteLine(person.Age); // 输出: 25

// person.Age = -5; // 抛出异常: Age cannot be negative.

在这个例子中,set访问器对传入的值进行验证,确保age永远不会为负数

相关推荐
上单带刀不带妹10 分钟前
手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
开发语言·前端·javascript·vue.js·前端框架
-凌凌漆-1 小时前
【Qt】QStringLiteral 介绍
开发语言·qt
程序员爱钓鱼1 小时前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
军训猫猫头1 小时前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net
真的想上岸啊2 小时前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习
明天好,会的2 小时前
跨平台ZeroMQ:在Rust中使用zmq库的完整指南
开发语言·后端·rust
丁劲犇2 小时前
用 Turbo Vision 2 为 Qt 6 控制台应用创建 TUI 字符 MainFrame
开发语言·c++·qt·tui·字符界面·curse
旷世奇才李先生3 小时前
Next.js 安装使用教程
开发语言·javascript·ecmascript
charlie1145141913 小时前
深入理解Qt的SetWindowsFlags函数
开发语言·c++·qt·原理分析
likeGhee4 小时前
python缓存装饰器实现方案
开发语言·python·缓存