Я знаю, что невозможно наследовать от типового параметра типа, но это было бы удобно при реализации общего прокси для производных абстрактного типа: -)
Кто-нибудь знает, почему это невозможно?
Пример С#:
abstract class Foo
{
public virtual void Bar()
{
// nop
}
}
class FooProxy<TFoo> : TFoo
where TFoo : Foo
{
public override void Bar()
{
// do some stuff before
base.Bar();
// do some stuff after
}
}
EDIT: Еще один код, чтобы проиллюстрировать пример того, как это можно использовать. Рассмотрим следующие производные от Foo:
class FooX : Foo
{
public string X { get; set; }
public override void Bar()
{
Console.WriteLine("Doing Bar X");
}
}
class FooY : Foo
{
public string Y { get; set; }
public override void Bar()
{
Console.WriteLine("Doing Bar Y");
}
}
И вызывающий код:
FooProxy<FooX> fooXProxy = new FooProxy<FooX>();
fooXProxy.X = "test X";
fooXProxy.Bar();
FooProxy<FooY> fooYProxy = new FooProxy<FooY>();
fooYProxy.Y = "test Y";
fooYProxy.Bar();
Код в переопределении FooProxy метода Bar() будет использоваться повторно при использовании FooX и FooY.
РЕДАКТИРОВАТЬ: Пересмотрено согласно Pete OHanlon answer: сделанный метод Bar() виртуальный.