interface IFoo
{
// Не содержит метод Commit()
// Но содержит все остальные методы и свойства, которые реализованы в классе Foo
}
interface ITransaction
{
void Commit();
}
class Foo : IFoo, ITransaction
{
// ...
public void Commit()
{
// ...
}
}
class Bar<T, TImpl> where TImpl : T, ITransaction, new()
{
private readonly TImpl _foo;
protected T Foo {
get { return _foo; }
}
public Bar() {
_foo = new TImpl();
}
public void Commit()
{
_foo.Commit();
}
}