私は最近、パラメーターを持つコンストラクターに関する「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;
}
工場への最初の電話がうまくいく理由に誰かが光を当てることができれば、私は非常に感謝しています。
ありがとう。