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;
    }
    }

```

  1. 具有表达式体的属性访问器 (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}";
}

```

  1. 自动实现的属性

如果属性的 set 和 get 访问器中没有任何逻辑,就可以使用自动实现的属性。这种属性会自动实现后备成员变量。使用自动实现的属性,就不能在属性设置中验证属性的有效性。

不需要声明私有字段。编译器会自动创建它。使用自动实现的属性,就不能直接访问字段,因为不知道编译器生成的名称。

```

public int Age {get;set;}

```

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

```

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

```

相关推荐
新手unity自用笔记14 小时前
项目-坦克大战学习-子弹的移动与销毁
笔记·学习·c#
qinzechen15 小时前
分享几个做题网站------学习网------工具网;
java·c语言·c++·python·c#
yufei-coder19 小时前
C# Windows 窗体开发基础
vscode·microsoft·c#·visual studio
dangoxiba19 小时前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象
游戏·unity·visualstudio·c#·游戏引擎
AitTech19 小时前
深入理解C#中的TimeSpan结构体:创建、访问、计算与格式化
开发语言·数据库·c#
hiyo5851 天前
C#中虚函数和抽象函数的概念
开发语言·c#
开心工作室_kaic1 天前
基于微信小程序的校园失物招领系统的设计与实现(论文+源码)_kaic
c语言·javascript·数据库·vue.js·c#·旅游·actionscript
时光追逐者1 天前
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
前端·microsoft·开源·c#·.net·layui·.netcore
friklogff1 天前
【C#生态园】打造现代化跨平台应用:深度解析.NET桌面应用工具
开发语言·c#·.net
hiyo5852 天前
C#的面向对象
开发语言·c#