Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代理设计模式封装解决方案?_C#_Design Patterns_.net 4.0_Delegates_Proxy Pattern - Fatal编程技术网

C# 代理设计模式封装解决方案?

C# 代理设计模式封装解决方案?,c#,design-patterns,.net-4.0,delegates,proxy-pattern,C#,Design Patterns,.net 4.0,Delegates,Proxy Pattern,我想执行一个函数,但在此之前,我想验证密码 我选择使用代理设计模式 简言之: 创建代理类 发送密码 如果密码正确,告诉他执行什么函数 问题是,根据代理模式,整个内部应该/最好是私有的 所以-我无法从方法之外看到1/2 我不想把方法1/2公诸于众(我也不想要If)。我想使用代理 那么,我如何(从外部)向他发送有效的Actionparam?(空调acparam) 我是否应该为每项活动制定一项公共行动 通常,要执行的方法不应是代理类的一部分。该类的调用方正在传递的方法: public class P

我想执行一个函数,但在此之前,我想验证密码

我选择使用代理设计模式


简言之:

创建代理类

发送密码

如果密码正确,告诉他执行什么函数

问题是,根据代理模式,整个内部应该/最好是私有的

所以-我无法从方法之外看到1/2

我不想把
方法1/2
公诸于众
(我也不想要If)。我想使用代理

那么,我如何(从外部)向他发送有效的
Action
param?(空调
ac
param)

我是否应该为每项活动制定一项公共行动


通常,要执行的方法不应是代理类的一部分。该类的调用方正在传递的方法:

public class ProxyClass
{
    public ProxyClass(string password, Action ac)
    {
        if (password == "111")
        {
            ac();
        }
    }
}
然后可以将
操作作为第二个参数传递:

var proxy = new ProxyClass("111", () => 
{
    ... some code that you want to execute in case of success
});
或者,如果已经定义了某些方法:

public class Foo
{
    public void Success() 
    {
        ... some code that you want to execute in case of success
    }
}
你可以:

var foo = new Foo();
var proxy = new ProxyClass("111", foo.Success);
当然,如果成功是一种静态方法,则不需要
Foo
的实例:

var proxy = new ProxyClass("111", Foo.Success);

那么method1/2()应该对代理的调用者可见吗?@RoyiNamir,好吧,如果你像你那样在代理中定义它们,那么是的,它们应该可见,以便调用者可以决定调用哪一个。如果这些方法不是代理类的一部分,那么调用方可以从其他地方传递它们。但是,当然,因为调用方需要将一个操作作为第二个参数传递给构造函数,所以调用方应该知道这个操作。我觉得奇怪的是,它使用的设计模式是访问控制-强制我将方法作为公共/对每个人可见的方式。。。。。