【发布时间】:2009-09-14 09:44:47
【问题描述】:
我知道不可能从泛型类型参数继承,但是在为抽象类型的派生类实现通用代理时会很方便:-)
有人知道为什么这是不可能的吗?
示例 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();
在使用 FooX 和 FooY 时,将重用 Bar() 方法的 FooProxy 覆盖中的代码。
编辑:根据 Pete OHanlon 的回答修改:将 Bar() 方法设为虚拟。
【问题讨论】: