这适用于C#? 将类类型作为参数传递
我有一个实现接口的类适配器.我想用MyFooClass实例填充数组结构,其中MyFooClass的名称或引用我想从外部接收它.我将在我的适配器代码中实例化它们.
例如:
public void FillWsvcStructs(DataSet ds, ClassType Baz)
{
IFoo.Request = ds.DataTable[0].Request;
IFoo.Modulebq = string.Empty;
IFoo.Clasific = string.Empty;
IFoo.Asignadoa = ds.DataTable[0].Referer;
IFoo.Solicita = "Jean Paul Goitier";
// Go with sub-Elems (Also "Interfaceated")
foreach (DataSet.DataTableRow ar in ds.DataTable[1])
{
if ((int) ar.StatusOT != (int)Props.StatusOT.NotOT)
{
///From HERE!
IElemRequest req = new (Baz)(); // I don't know how to do it here
///To HERE!
req.Id = string.Empty;
req.Type = string.Empty;
req.Num = string.Empty;
req.Message = string.Empty;
req.Trkorr = ar[1];
TRequest.Add(req);
}
}
}
Run Code Online (Sandbox Code Playgroud)
public void FillWsvcStructs<ClassType>(DataSet ds) where ClassType : IElemRequest, new()
{
IFoo.Request = ds.DataTable[0].Request;
IFoo.Modulebq = string.Empty;
IFoo.Clasific = string.Empty;
IFoo.Asignadoa = ds.DataTable[0].Referer;
IFoo.Solicita = "Jean Paul Goitier";
// Go with sub-Elems (Also "Interfaceated")
foreach (DataSet.DataTableRow ar in ds.DataTable[1])
{
if ((int) ar.StatusOT != (int)Props.StatusOT.NotOT)
{
IElemRequest req = new ClassType();
req.Id = string.Empty;
req.Type = string.Empty;
req.Num = string.Empty;
req.Message = string.Empty;
req.Trkorr = ar[1];
TRequest.Add(req);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用泛型可能最好解决了这个问题:
public void FillWsvcStructs<T>(DataSet ds) where T : IElemRequest, new()
{
//..
//new() constraint enables using default constructor
IElemRequest req = new T();
//IElemRequest constraint enables using interface properties
req.Id = string.Empty;
//..
}
Run Code Online (Sandbox Code Playgroud)
如果您有多种类型需要能够访问/实例化,则声明遵循相同的规则(可以从msdn轻松收集):
public void FillWsvcStructs<T, U, V>() where T : IElemRequest, new()
where U : IFoo, new()
where V : IBar, new()
{
//..
}
Run Code Online (Sandbox Code Playgroud)