Tôi đang tìm một số cách để có được tất cả các lớp thừa kế một lớp trừu tượng chung và thực hiện một phương thức trên mỗi lớp đó.Nhận tất cả các lớp được thừa kế của một lớp trừu tượng chung
Tôi đã làm theo Change parameter type when implementing an abstract method này để có việc triển khai lớp tôi muốn, một cái gì đó tương tự như sau:
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
}
}
này find đang làm việc, cho đến khi tôi cần để có được tất cả các hạng A & B và gọi Search()
phương pháp cho mỗi lớp. Với một lớp trừu tượng không chung chung, tôi có thể sử dụng đoạn mã sau để có được lớ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;
Sau đó, làm thế nào tôi có thể nhận được tất cả các lớp A và B kế thừa từ AbstractRequest<AResponse>
và AbstractRequest<BResponse>
?
Chỉnh sửa: Tôi quên đề cập đến. Giả sử rằng sẽ có nhiều triển khai tương tự như A hoặc B và sẽ được thêm vào theo thời gian. Tôi muốn có một giải pháp "thanh lịch" (nếu có thể) để sau này, tôi chỉ cần chăm sóc việc thực hiện C, D, v.v.
Cảm ơn!
Người đàn ông, câu trả lời đã chỉnh sửa của bạn chính xác là những gì tôi cần !!! Thử nghiệm, và làm việc hoàn toàn tốt trong trường hợp của tôi. Cảm ơn nhiều! –