【发布时间】:2014-12-03 09:40:08
【问题描述】:
我正在寻找某种方法来获取所有继承通用抽象类的类,并对每个类执行一个方法。
我一直在关注这个Change parameter type when implementing an abstract method 以获得我想要的类实现,类似于这样:
public abstract class AbstractRequest<TResponseData>
where TResponseData : IResponseData
{
public abstract void Search();
public abstract GoodData BindData(TResponseData data);
}
public interface IResponseData
{
}
public class AResponse : IResponseData
{
}
public class BResponse : IResponseData
{
}
public class A : AbstractRequest<AResponse>
{
public override void Search()
{
// get AResponse
// Call to BindData() with AResponse
}
public override GoodData BindData(AResponse data)
{
// Bind the data from AResponse to GoodData
}
}
public class B : AbstractRequest<BResponse>
{
public override void Search()
{
// Get BResponse
// Call to BindData() with BResponse
}
public override GoodData BindData(BResponse data)
{
// Bind the data from BResponse to GoodData
}
}
这是有效的查找,直到我需要获取所有 A 和 B 类并为每个类调用 Search() 方法。对于非泛型抽象类,我可以使用以下 sn-p 来获取类
var instances = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.IsSubclassOf(typeof(AbstractRequest))
&& t.GetConstructor(Type.EmptyTypes) != null
select Activator.CreateInstance(t) as AbstractRequest;
那么,我怎样才能得到继承自AbstractRequest<AResponse>和AbstractRequest<BResponse>的所有类A和B呢?
编辑:我忘了提。假设会有许多类似于 A 或 B 的实现,并且会随着时间的推移而添加。我想要一个“优雅”(如果可能的话)的解决方案,所以稍后我只需要处理 C、D 等的实现。
谢谢!
【问题讨论】:
标签: c# inheritance abstract