c# - 为什么使用类级访问修饰符而不是对象级?

标签 c# class object access-modifiers

在使用 C# 时,我最近意识到我可以调用 Foo对象的私有(private)函数来自 Foo的静态函数,甚至来自其他 Foo对象。在了解了所有关于访问修饰符的知识之后,这对我来说听起来很奇怪。

据我所知,当函数执行属于某种内部流程的一部分时,您将函数设为私有(private)。只有对象本身知道何时使用这些函数,因为其他对象不应该/不能控制对象的流程。是否有任何理由可以将同一类的其他对象排除在这个非常简单的规则之外?

根据要求,一个例子:

public class AClass {
    private void doSomething() { /* Do something here */ }
    public void aFunction() {
        AClass f = new AClass();
        f.doSomething(); // I would have expected this line to cause an access error.
    }
}

最佳答案

private 修饰符强制执行 Encapsulation原则。

这个想法是“外部世界”不应该改变 AClass 的内部流程,因为 AClass 的实现可能会随着时间的推移而改变(你将不得不改变整个外部世界来修复实现中的差异——这几乎是不可能的) .

当 AClass 的实例访问其他 AClass 实例的内部时 - 您可以确定这两个实例始终知道 AClass 的实现细节。如果 AClass 流程的内部逻辑发生变化 - 您所要做的就是更改 AClass 的代码。

然而,在其他一些语言中,private 在实例级别工作,但在 C# 中并非如此。

关于c# - 为什么使用类级访问修饰符而不是对象级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354728/

相关文章:

class - 为什么我不能 "implements"TypeScript 2.4+ 中的全可选接口(interface)?

c# - 不能将对象用作方法的默认参数类型

javascript - 如何循环遍历数组对象在 native react 中创建 View ?

c# - 无法在 Windows 7 x64 上正确注册 x64 COM dll

c# - 嵌套数据列表的问题

python - 从该类内部的类调用实例变量

objective-c - 关于objective-c中 "strong"属性的问题

javascript - JavaScript中如何判断一个对象是否具有给定的属性

c# - 自然加入.net

c# - 为什么要将 2 类的引用放入 1 类的对象中?