我最近一直在研究一个通用工厂,它绕过了关于带参数的构造函数的“where”约束,由于一个错误,我遇到了一些我不太理解的东西,想知道是否有人能够发光在上面。
有问题的代码行是:
ITestInterface myObj = new GenericFactory<ITestInterface>(
() => (new TestClass("username", "password"))
).CreateObject() as ITestInterface;
ITestInterface myNewObj = new GenericFactory<ITestInterface>(
(string x, string y) => (new TestClass(x, y))
).CreateObject("username ", " password") as ITestInterface;
这两行都做同样的事情,但我预计第一行会失败。
工厂代码如下:
public GenericFactory (Func<T> getNewT)
{
_getNewObject = getNewT;
}
public GenericFactory(Func<string, string, T> getNewT)
{
_getNewObjectTwoParams = getNewT;
}
public T CreateObject ()
{
if (_getNewObject == null)
{
return default(T);
}
else
{
return _getNewObject();
}
}
public T CreateObject (string username, string password)
{
if (_getNewObjectTwoParams == null)
{
return default(T);
}
else
{
return _getNewObjectTwoParams(username, password);
}
}
TestClass 具有以下构造函数:
public TestClass (string name, string password)
{
_name = name;
_password = password;
}
如果有人能阐明为什么第一次致电工厂有效,我将不胜感激。
谢谢。