Доброго времени суток!
Есть класс и интерфейс
class Foo : IFoo
{
// ...
public void Commit()
{
// ...
}
}
interface IFoo
{
// Не содержит метод Commit()
// Но содержит все остальные методы и свойства, которые реализованы в классе Foo
}
Есть другой класс (выполняющий функцию сервиса)
class Bar
{
protected readonly IFoo _foo;
private Foo _fooSecure
{
get { return _foo; }
}
public Bar() {
_foo = new Foo();
}
public void Commit()
{
_fooSecure.Commit();
}
}
Наследуемся от Bar
class BarChild : Bar
{
public void SomeMethod()
{
_foo.Commit(); // Выдаст ошибку, так как у IFoo нет метода Commit.
// Это хорошо, этого мы и добивались
}
}
Таким образом получается во всех потомках класса Bar нельзя вызвать метод _foo.Commit(), но при этом в самом Bar сделать это можно через свойтсво _fooSecure.
Вопрос:
Можно ли реализовать похужую схему через Generic параметры, чтобы в дочерних классах Bar, нельзя было добраться до метода .Commit()? Так как у каждого потомка BarChild свой тип переменной _foo, и его нужно бы передоавть как generic.
Например:
BarChild : Bar<IAppFoo, AppFoo>
... где IAppFoo нужно, чтобы использовать его в самом BarChild, а AppFoo нужно, чтобы в Bar можно было во-первых создать сам объект через new AppFoo(), а во-вторых потом использовать метод .Commit().
Пробовал по разному, ничего толкового не выходит.
Прошу помощи и подсказки, как можно было бы спроектировать такую, казалось бы не очень сложную, схему.