c# - 代表的封装问题?

标签 c# oop encapsulation

我想知道为什么这行得通?

例如我有一些看起来像这样的执行器类:

public class Executor
{
    public void Execute(Action action)
    {
        action();
    }
}

现在我有一些需要执行的类,看起来像:

public class NeedToBeExecuted
{
    public void Invoke()
    {
        Executor executor = new Executor();
        executor.Execute(DoSomething);
    }

    private void DoSomething()
    {
        // do stuff private
    }
}

我的问题是为什么这是我将私有(private)方法传递给其他类的工作?

这不是封装问题吗?

最佳答案

不,这不违反封装。

首先:类本身就是决定将委托(delegate)交给其私有(private)方法之一的东西!该类可以访问其私有(private)方法,如果它选择将对某个方法的引用传递给该方法的可访问性域之外的代码,那完全在其权利范围内。

第二:方法的可访问性域不限制方法可以被调用的地方。 它限制了可以通过名称查找方法的位置Executor 类从不使用name DoSomething 来调用私有(private)方法。它使用名称 action

关于c# - 代表的封装问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15586728/

相关文章:

c# - 如何使使用队列线程的异步方法安全

c# - 如何在 C# 的 Migrator.Framework 中添加具有默认值的新列?

python-3.x - 在单独的文件中定义 Python 类

JavaScript 对象继承与 IIFE?

javascript - 如何从 Rails Assets 管道中的不同文件调用 JS 函数

c# - CancellationTokenSource.CancelAfter() 是否有漏洞?

c# - 我可以创建一个 "global"对象来存储多个对象的变量吗?

ruby-on-rails - 我们是否将 Rails ActiveRecord 用作混合结构,即数据结构 + 对象?

css - Angular:封装导致 CSS 冲突

oop - OO设计封装