【发布时间】:2019-06-28 05:49:05
【问题描述】:
我正在尝试使我的代码尽可能地可重用,但在尝试将构造函数参数传递给用作类型参数的类时遇到了问题。
我目前拥有的是这样的:
public sealed class SubmitForm : DerivedClass
{
}
public void TestMethod_Simulated()
{
var foo = GetObject<SubmitForm>();
SubmitData(foo);
}
private void SubmitData(SubmitForm form)
{
// Do work
}
public T GetObject<T>()
where T : class
{
// Work
}
这是有效的,因为 SubmitForm 没有显式的构造函数和参数。但是我想扩展功能并需要一个需要参数的显式构造函数。
添加构造函数后,我希望使用类型参数“SubmitForm”调用“GetObject”,包括其显式构造函数的参数。
这显然不可能以任何直接的方式实现,但我不想相信没有办法让它发挥作用。
下面显示了我想要实现的目标,即在实例化它时将类用作类型参数,以便访问我创建的构造函数:
public sealed class SubmitForm : DerivedClass
{
public SubmitForm(EnumType typeVar)
{
_derivedVar = typeVar;
}
}
public void TestMethod_Simulated()
{
var foo = GetObject<new SubmitForm(EnumType.FormA)>();
SubmitData(foo);
}
private void SubmitData(SubmitForm form)
{
// Do work
}
public T GetObject<T>()
where T : class
{
// Work
}
我希望这是有道理的。我似乎找不到一种方法来首先实例化该类,然后将其用作类型参数。
【问题讨论】:
-
SubmitData方法期望的参数类型是什么? -
抱歉,我已经包含了 SubmitData 方法的签名 - 它的参数类型是“SubmitForm”
-
你想让
GetObject使用特定的构造函数创建一个SubmitForm对象吗? -
不,我关心的不是 GetObject。GetObject 是现有的通用代码,用于构造要与 SubmitData 一起使用的过滤器对象。我的问题是我想用正确的表单类型参数(根据构造函数)实例化我的 SubmitForm 类,以便 GetObject 可以基于该构造函数创建正确的过滤器对象。这样做的原因是因为各种表单将使用相同的类,但不同的表单类型除外。
标签: c# types parameters constructor arguments