Poszukuję sposobu na uzyskanie wszystkich klas dziedziczących ogólną klasę abstrakcyjną i wykonanie metody na każdej z tych klas.Uzyskaj wszystkie odziedziczone klasy ogólnej klasy abstrakcyjnej
Śledzę ten Change parameter type when implementing an abstract method mieć implementacje klasy chcę, coś podobnego do tego:
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
}
}
To find działa, aż muszę uzyskać wszystkie Klasa A & B i wywołaj Search()
metoda dla każdej z klas. Z non-rodzajowego klasy abstrakcyjnej, mogłem użyć następującego fragmentu kodu, aby uzyskać klas
var instances = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.IsSubclassOf(typeof(AbstractRequest))
&& t.GetConstructor(Type.EmptyTypes) != null
select Activator.CreateInstance(t) as AbstractRequest;
Następnie, w jaki sposób można uzyskać wszystkie klasy A i B, które dziedziczą z AbstractRequest<AResponse>
i AbstractRequest<BResponse>
?
Edytuj: Zapomniałem wspomnieć. Załóżmy, że będzie wiele implementacji podobnych do A lub B i będą one dodawane z czasem. Chciałbym mieć "elegancki" (jeśli to możliwe) rozwiązanie, więc później muszę tylko zająć się implementacją C, D, itp.
Dzięki!
Człowieku, twoja zredagowana odpowiedź jest dokładnie tym, czego potrzebuję !!! Przetestowany i działał doskonale w moim przypadku. Dziękuję Ci bardzo! –