我目前在两个抽象类中有2种具体方法。一个类包含当前方法,而另一个类包含旧版方法。例如:
// Class #1
public abstract class ClassCurrent<T> : BaseClass<T> where T : BaseNode, new()
{
public List<T> GetAllRootNodes(int i)
{
//some code
}
}
// Class #2
public abstract class MyClassLegacy<T> : BaseClass<T> where T : BaseNode, new()
{
public List<T> GetAllLeafNodes(int j)
{
//some code
}
}
我希望你能在应用程序的相关场景中运行相应的方法。我计划编写一个委托来处理这个问题。我的想法是,我只需调用委托并在其中编写逻辑以处理根据从哪个类/项目调用它而调用哪个方法(至少我认为委托是用来做这个的,以及它们如何被使用)。
然而,在这个主题上我有一些问题(在一些谷歌搜索之后):
1)是否可能有一个委托知道驻留在不同类中的2个或更多个方法? 2)是否可能使一个委托产生抽象类(就像上面的代码)?(我的猜测是不可能的,因为委托创建传入类的具体实现) 3)我尝试为上面的代码编写一个委托。但我遇到了技术上的挑战。
public delegate List<BaseNode> GetAllNodesDelegate(int k);
GetAllNodesDelegate del = new GetAllNodesDelegate(ClassCurrent<BaseNode>.GetAllRootNodes);
我收到了以下错误信息:
An object reference is required for the non-static field, method, property ClassCurrent<BaseNode>.GetAllRootNodes(int)
我可能误解了一些东西...但是如果我必须在调用类中手动声明委托,并像上面那样手动传递函数,那么我开始怀疑委托是否是处理我的问题的好方法。
谢谢。
ClassCurrent(获取所有根节点)
类型和另一种方法,例如MyClassLegacy(获取所有子节点)
类型,则需要知道实例的类型。而如果它们共享一个常见接口,则只需知道它实现了给定的接口即可,无需知道类型。设置每种类型的委托的代码将包含一个if来检查类型或为每个允许的类型使用特定类型作为参数的方法。 - Corneliusif (type A) d = instance.B() else if (type B) d = instance.C()
,这将涉及运行时类型检查,这不是一个很好的面向对象设计。 - Cornelius