当前位置: 首页 > news >正文

C#属性

属性(property)的概念是:它是一个方法或一对方法,在客户端代码看来,他(们)是一个字段。
下面把前面示例中变量名为_firstName的名字字段改为私有。FirstName属性包含get和set访问器,来检索和设置支持字段的值:

class PhoneCustomer
{private string _firstName;public string FirstName{get{return _firstName;}set{_firstName=value;}}
}

在面向对象编程中,"客户端代码"是指使用某个类或对象的代码。换句话说,它是调用类的方法或访问类的属性的代码。客户端代码通常是由开发者编写的,它使用类库提供的功能来完成特定的任务。
在这里,"客户端代码"是指那些使用包含 firstName 属性的类的代码。下面是如何理解客户端代码与属性的关系:

假设我们有一个类 Person,并且我们想要将 firstName 字段改为私有,然后通过一个属性来访问它。以下是类定义和客户端代码的示例:

public class Person
{// 私有字段private string firstName;// 公共属性public string FirstName{get { return firstName; }set { firstName = value; }}
}// 客户端代码
public class Program
{static void Main(){// 创建 Person 类的实例Person person = new Person();// 使用属性设置私有字段的值person.FirstName = "张三";// 使用属性获取私有字段的值string name = person.FirstName;// 输出名字Console.WriteLine("姓名: " + name);}
}


在这个例子中,Person 类有一个私有字段 firstName 和一个公共属性 firstName。属性 firstName 包含了 get 和 set 访问器,允许客户端代码检索和设置私有字段的值。

以下是客户端代码的几个要点:

1. 客户端代码通过 person.RstName = "张三"; 设置 rstName 字段的值,即使 rstName 是私有的。
2. 客户端代码通过 string name = person.RstName; 获取 rstName 字段的值,即使 rstName 是私有的。
3. 属性使得客户端代码可以像直接访问公共字段一样访问私有字段,但实际上是通过 get 和 set 方法来间接访问的。

使用属性而不是直接暴露字段的好处是,可以添加额外的逻辑,例如验证、日志记录或者计算值,而不需要改变客户端代码。这种方式遵循了封装的原则,即隐藏实现细节并提供简洁的接口。

## 属性定义的几种方式

1. 一般方式

private string _firstName;public string FirstName{get{return _firstName;}set{_firstName=value;}}

```

2. 具有表达式体的属性访问器 (lambda表达式)
```

//例1
private string _firstName;
public string FirstName
{get=>_firstName;set=>_firstName=value;
}

```
```

例2
public class Person
{public Person(string firstName,string lastNmae){FirstName=firstName;LastName=lastName;}public string FirstName{get;}public string LastName{get;}public string FullName=>$"{FirstName}{LastName}";
}

```

3. 自动实现的属性
如果属性的 set 和 get 访问器中没有任何逻辑,就可以使用自动实现的属性。这种属性会自动实现后备成员变量。使用自动实现的属性,就不能在属性设置中验证属性的有效性。
不需要声明私有字段。编译器会自动创建它。使用自动实现的属性,就不能直接访问字段,因为不知道编译器生成的名称。
```

public int Age {get;set;}

```
自动实现的属性可以使用属性初始化器来初始化:
```

public int Age {get;set;}=42;


```

http://www.lryc.cn/news/418115.html

相关文章:

  • Spring的代理模式
  • el-table合计放在标题上方且合并列以及渲染后端返回的数据
  • magic-api相关应用与配置
  • AI大模型赋能开发者|海云安创始人谢朝海受邀在ISC.AI 2024大会就“大模型在软件开发安全领域的应用”主题发表演讲
  • 基于Kahn算法|动态线程池,支持扩展点并发执行|召回|过滤
  • Bootstrap 4 表头固定,tbody滚动条
  • MYSQL知识点(持续更新)
  • html+css网页设计 酷狗首页1个页面 (无js)
  • 用户体验至上:9款软件界面设计工具分享
  • Lambda 表达式:解锁编程世界的魔法之门
  • 【python】Pandas处理Excel表格用法分析与最佳实践
  • KL 散度(python+nlp)
  • 四种推荐算法——Embedding+MLP、WideDeep、DeepFM、NeuralCF
  • 鹏鼎控股:最新面试求职SHL逻辑测评笔试题库讲解及真题分享
  • 【Git】git 不跟踪和gitignore区别
  • 51单片机—智能垃圾桶(定时器)
  • 熵权法模型(评价类问题)
  • 用uniapp 及socket.io做一个简单聊天app 踢人拉黑 7
  • springboot项目迁移到阿里云函数
  • Java设计模式(桥接模式)
  • 【独家原创】基于APO-Transformer-LSTM多特征分类预测(多输入单输出)Matlab代码
  • 【大模型】大模型指令微调的“Prompt”模板
  • Spring的设计模式----工厂模式及对象代理
  • 【算法】浅析广度优先搜索算法
  • 分布式时序数据库TimeLyre 9.2发布:原生多模态、高性能计算、极速时序回放分析
  • PMP考试题库每日五题+答案解析
  • 机器学习用python还是R,哪个更好?
  • 【数据结构】mapset详解
  • 数据结构(邓俊辉)学习笔记】词典 02—— 散列函数
  • Python学习(1):使用Python的Dask库实现并行计算