Answer the question
In order to leave comments, you need to log in
Can the following approach be implemented using Generic types?
Good day!
There is a class and an interface
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();
}
}
class BarChild : Bar
{
public void SomeMethod()
{
_foo.Commit(); // Выдаст ошибку, так как у IFoo нет метода Commit.
// Это хорошо, этого мы и добивались
}
}
BarChild : Bar<IAppFoo, AppFoo>
Answer the question
In order to leave comments, you need to log in
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();
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question