У меня есть абстрактный класс A, где я получил классы B и C.
Класс A предоставляет абстрактный метод DoJOB (), который реализуется обоими производными классами.
Существует класс X, внутри которого есть методы, которые должны вызывать DoJOB ().
Класс X не может содержать код, такой как B.DoJOB () или C.DoJOB ().
Пример:
public class X
{
private A foo;
public X(A concrete)
{
foo = concrete;
}
public FunnyMethod()
{
foo.DoJOB();
}
}
При создании экземпляра класса X я хочу решить, какой производный класс (B или C) необходимо использовать.
Я думал о передаче экземпляра B или C с помощью конструктора X.
X kewl = new X(new C());
kewl.FunnyMethod(); //calls C.DoJOB()
kewl = new X(new B());
kewl.FunnyMethod(); // calls B.DoJOB()
Мой тест показал, что объявление метода с параметром A не работает. Я что-то пропустил?
Как я могу реализовать это правильно?
(A является абстрактным, его нельзя создать)
EDIT:
Извините, я забыл что-н.
класс A является обобщенным абстрактным синглтоном:
abstract public class A<T> where T : A<T>
{
....
}
public sealed class B : A<B>
{
.....
}
public sealed class C : A<C>
{
.....
}
См. Пример:
http://www.c -sharpcorner.com / UploadFile / snorrebaard / GenericSingleton11172008110419AM / GenericSingleton.aspx
Под заголовком "Решение с использованием универсального синглтона в качестве абстрактного класса"