面向对象—属性(Properties)

在C#和Unity开发中,面向对象编程是一个核心概念,属性(Properties)是这个概念中非常重要的一个部分。属性允许你控制类成员(变量)的访问方式,你可以理解为它是在字段(field)和方法(method)之间提供了一种特殊的访问方式。

让我们用简单的语言来了解属性:

基本概念
封装(Encapsulation):

这是面向对象编程的核心原则之一,意味着对象的内部状态应该被隐藏起来,只能通过定义好的接口进行交互。属性帮助实现这个概念,通过提供公开的方法来访问私有字段。
字段(Field):

类的变量称为字段。通常,字段会被设置为私有(private),这意味着它们只能在类的内部被访问。
属性(Property):

属性是公共的方法,用来访问私有字段。它们通常包含两个部分:get 和 set。通过get可以读取私有字段的值,通过set可以修改私有字段的值
示例
假设你有一个代表游戏中角色的类,这个角色有生命值(health):

class Character
{
    private int health; // 私有字段

    // 属性
    public int Health
    {
        get { return health; } // 获取私有字段的值
        set { health = value; } // 设置私有字段的值
    }
}

在这个例子中,health字段是私有的,这意味着它不能直接从类的外部访问。相反,我们提供了一个属性Health,外部代码可以通过这个属性来获取或设置health的值。

为什么使用属性?
控制访问:

你可以定义属性只有get或只有set。例如,如果你只提供get,那么这个属性就是只读的。
验证数据:

在set部分,你可以添加代码来验证输入数据。例如,你可以确保角色的生命值永远不会低于0或高于最大值。
封装逻辑:

如果获取或设置字段时需要额外的逻辑(比如日志记录或者错误检查),你可以在属性中添加这些逻辑,而不是让使用者自己每次在访问字段时都写这些重复的代码。
自动实现的属性(Auto-Implemented Properties)
在没有额外逻辑的情况下,C#允许你以更简洁的方式定义属性,称为自动实现的属性:

class Character
{
    // 自动实现的属性
    public int Health { get; set; }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容