我知道无法从泛型类型参数继承,但在实现抽象类型的派生通用代理时这将非常方便 :-)
有人知道为什么不可能吗?
示例代码(C#):
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
}
}
编辑:这里提供更多代码,以说明如何使用它。考虑以下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的答案进行修改:将Bar()方法改为虚方法。