oop - 属性和封装

标签 oop properties encapsulation member-variables

以下是关于在类中使用属​​性的问题。

我一直在使用公共(public)属性而不是公开公开成员变量。大多数人建议这种方法有助于封装。但是,我不理解通过将其作为属性来封装的优势。

许多人不知道使用属性的真正原因。他们只是将其作为编码标准的一部分。

有人能清楚地解释一个属性如何比公共(public)成员变量更好,以及它如何改进封装吗?

最佳答案

封装有助于将调用类与更改隔离开来。

假设您有一个模拟汽车引擎的简单类(因为所有 OO 示例都应该涉及汽车类比 :))。您可能有一个像这样的简单字段:

private bool engineRunning;

简单地将这个字段公开或提供一个 IsEngineRunning() getter 似乎没有任何不同。

现在假设您使您的类(class)更加复杂,您想要删除该字段并将其替换为:
private bool ignitionOn;
private bool starterWasActivated;

现在,如果您有很多类访问旧的 engineRunning你必须去改变他们所有的领域(糟糕的时期)。

相反,如果您从以下内容开始:
public bool IsEngineRunning()
{
    return this.engineRunning;
}

您现在可以将其更改为:
public bool IsEngineRunning()
{
    return ignitionOn && starterWasActivated;
}

并且类的界面保持不变(美好时光)。

关于oop - 属性和封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2903385/

相关文章:

string - 变体记录中的短字符串?

c# - 两个嵌套的 DLL

c# - 函数式编程中的对象 - 不变性

python - 我在实例化期间传递给类的参数/kwargs __init__ 被忽略

c# - 为什么 C# 集合属性在调用它们的属性时没有标记为过时?

c# - 自上次访问属性以来耗时

c# - 为什么私有(private)成员变量可以被类实例改变?

python - Python中的非成员与成员函数

c# - 具有空方法的接口(interface)与抽象类

oop - VB6 实现和事件