C# 如何使用继承基本方法参数的参数重写虚拟方法?
我从C# 如何使用继承基本方法参数的参数重写虚拟方法?,c#,inheritance,virtual-functions,overriding,C#,Inheritance,Virtual Functions,Overriding,我从ObjBase类继承了一组对象。所有这些对象的处理逻辑都是相同的,只是有点不同。如何将所有逻辑保存在公共虚拟无效工作(ObjBase o)中,并将特定于流程的逻辑保存在重写方法中 下面的示例是我想要实现的,但由于重写参数,它无法编译 有什么更好的方法来实现这一点 class Foo { public void Do(ObjBase o) { switch (o.RequestType) { case "A":
ObjBase
类继承了一组对象。所有这些对象的处理逻辑都是相同的,只是有点不同。如何将所有逻辑保存在公共虚拟无效工作(ObjBase o)
中,并将特定于流程的逻辑保存在重写方法中
下面的示例是我想要实现的,但由于重写参数,它无法编译
有什么更好的方法来实现这一点
class Foo
{
public void Do(ObjBase o)
{
switch (o.RequestType)
{
case "A":
new ProcA<ObjA>().Work(o);
break;
case "B":
new ProcB<ObjB>().Work(o);
break;
}
}
}
class ObjBase { }
class ObjA : ObjBase { }
class ObjB : ObjBase { }
class ProcBase
{
public virtual void Work(ObjBase o)
{
//Common things to do...
}
}
class ProcA<T> : ProcBase where T : ObjBase
{
public override void Work(ObjA o)
{
base.Work(o);
//DoSpecificWork
}
}
class ProcB<T> : ProcBase where T : ObjBase
{
public override void Work(ObjB o)
{
base.Work(o);
//DoSpecificWork
}
}
class-Foo
{
公共无效Do(ObjBase o)
{
开关(o.RequestType)
{
案例“A”:
新程序()工作(o);
打破
案例“B”:
新程序()工作(o);
打破
}
}
}
类ObjBase{}
类ObjA:ObjBase{}
类ObjB:ObjBase{}
类ProcBase
{
公共虚拟无效工作(ObjBase o)
{
//常见的事情。。。
}
}
类ProcA:ProcBase,其中T:ObjBase
{
公共覆盖无效工作(ObjA o)
{
基础工作(o);
//特定剂量工作
}
}
类ProcB:ProcBase,其中T:ObjBase
{
公共覆盖无效工作(OBO)
{
基础工作(o);
//特定剂量工作
}
}
谢谢基本上,你不能。我建议您将自定义代码放入
virtual
方法中(也就是说,添加一个override
),然后强制转换-例如:
public override void Work(ObjBase o)
{
base.Work(o);
var a = o as ObjA;
if (a != null)
{
// do a-specific things
}
}
public void Work(ObjA o)
{
Work((ObjBase)o);
}
这确保了即使调用基类型的方法,逻辑也会发生
您还可以提供新的重载,例如:
public override void Work(ObjBase o)
{
base.Work(o);
var a = o as ObjA;
if (a != null)
{
// do a-specific things
}
}
public void Work(ObjA o)
{
Work((ObjBase)o);
}
但尚不清楚这是否增加了很多价值