给这个代表
public class XYZ
{
public static Action<Profile> DoSomething = (profile) =>
{
//some default code here
return;
};
}
在我的主要执行中的某个时候,我用它覆盖它:
XYZ.DoSomething = (currProfile) =>
{
// some overriding code here
}
如果需要重复代码,如何将代码设置回原始默认代码?
答案 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;
}