c#委托引用数组
当引用其他类时,我们使用委托。在单元测试期间,我们覆盖这些值 我有一个类引用了20多个其他类,所以我想我应该创建一个委托数组。如果我创建这些委托的静态数组(请参见下面的代码),它将存储委托的值,而不是对委托的引用 因此,单元测试无法更新这些值。为了解决这个问题,当我想使用代理时,我已经创建了代理数组,但我希望下面的代码能够正常工作c#委托引用数组,c#,arrays,delegates,reference,C#,Arrays,Delegates,Reference,当引用其他类时,我们使用委托。在单元测试期间,我们覆盖这些值 我有一个类引用了20多个其他类,所以我想我应该创建一个委托数组。如果我创建这些委托的静态数组(请参见下面的代码),它将存储委托的值,而不是对委托的引用 因此,单元测试无法更新这些值。为了解决这个问题,当我想使用代理时,我已经创建了代理数组,但我希望下面的代码能够正常工作 private static Func<int, bool> firstMethod = ExternalClass1.Method; private s
private static Func<int, bool> firstMethod = ExternalClass1.Method;
private static Func<int, bool> secondMethod = ExternalClass2.Method;
private static Func<int, bool> thirdMethod = ExternalClass3.Method;
private static Func<int, bool>[] handlers = { first, second, third };
public bool Test(int value)
{
foreach (var handler in handlers)
{
if (handler.Invoke(value) == true)
{
return true;
}
}
return false;
}
private static Func firstMethod=ExternalClass1.Method;
私有静态Func secondMethod=ExternalClass2.Method;
私有静态Func thirdMethod=ExternalClass3.Method;
私有静态Func[]处理程序={first,second,third};
公共布尔测试(int值)
{
foreach(处理程序中的变量处理程序)
{
if(handler.Invoke(value)==true)
{
返回true;
}
}
返回false;
}
您可以执行以下操作,而不是创建此处理程序数组:
private static IEnumerable<Func<int,bool>> GetHandlers()
{
yield return firstMethod;
yield return secondMethod;
yield return thirdMethod;
}
private静态IEnumerable GetHandlers()
{
收益率法;
收益率法;
收益率法;
}
现在您有了一种获取实际字段引用的方法,这样就可以在单元测试中替换它们,但也有了一种迭代所有处理程序的方法。也就是说,可以替换的委托数组基本上是可以重写的接口或抽象方法集。如果您使用为提供多态性而设计的语言特性来实现多态性,那么它可能会更干净、更易于维护。为了方便在单元测试期间使用委托交换行为,您可以使用Moq之类的模拟框架来模拟接口,而无需编写特定的测试类
-丹那有什么问题?错误是什么?您是否考虑过在某些情况下使用接口而不是委托?我们使用CSLA,因此所讨论的方法是静态的。AIUI接口不能通过静态方法实现,因此该方法不是选项。谢谢。那看起来正是我想要的。