如何将委托重置为原始代码

时间:2018-02-21 17:17:31

标签: c# lambda delegates

给这个代表

public class XYZ
{
    public static Action<Profile> DoSomething = (profile) =>
    {
        //some default code here
        return;
    };
}

在我的主要执行中的某个时候,我用它覆盖它:

XYZ.DoSomething = (currProfile) => 
{
    // some overriding code here
}

如果需要重复代码,如何将代码设置回原始默认代码?

2 个答案:

答案 0 :(得分:2)

这是永远不使用公共领域的一个很好的理由......

一旦你设定它;没了。您可以保留原始值:

var originalAction = XYZ.DoSomething;
XYZ.DoSomething = ...;
XYZ.DoSomething = originalAction;

通常依靠客户端代码处理这个问题是个坏主意;所以,如果我正在编写它,我会像这样展示一个属性:

public Action<X> DoSomethingOverride {get; set;}
public Action<X> DoSomething => doSomethingOverride ?? DefaultMethod;
private void DefaultMethod (X param)
{
}

还有很多其他方法可以解决这个问题,但都涉及存储原始方法。处理此问题的所有好方法都将使用属性来确保只有声明类实际设置DoSomething方法,并且可以重置为默认值。

总而言之;由于这是static设置,因此操作会影响使用此类的所有内容。这是后来要求的错误;不要这样做。

答案 1 :(得分:0)

也许这样的事情?

public static Action<Profile> _doSomethingBase = (profile) =>
{
    //some default code here
    return;
};

public static Action<Profile> _doSomething = _doSomethingBase;

public static Action<Profile> DoSomething
{
    get => _doSomething;
    set => _doSomething = value;
}

public static void RevertDoSomething()
{
    DoSomething = _doSomethingBase;
}