我目前在2个抽象类中有2个具体方法。一个类包含当前方法,而另一个包含传统方法。例如。c#委托和抽象类
// 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
}
}
我想让相应的方法在应用程序的相对应场景中运行。我打算写一个委托来处理这个问题。我的想法是,我可以调用委托并编写逻辑来处理调用哪个方法,具体取决于调用哪个类/项目(至少这是我认为代表的用途以及它们如何使用)。
不过,我对这个话题的一些问题(经过一些google搜索):
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'('GetAllRootNodes')和另一个方法,如果它是类型'MyClassLegacy'('GetAllLeaveNodes')那么你将不得不知道类型的情况。而如果它共享一个通用接口,则不需要知道它实现给定接口的类型。用于为每种类型设置委托的代码将包含一个if来检查类型或将特定类型作为每个允许类型的参数的方法。 – Cornelius 2010-03-17 08:46:52
@Cornelius - 你认为代表是什么?这听起来像你认为它与C中的函数指针相同。 – 2010-03-17 09:10:35
委托函数比函数指针更强大,因为它们是“第一类方法”并且具有闭包,但这只允许您以多态方式传递它们,而不会消除上面评论中设置它的复杂性。 – Cornelius 2010-03-17 09:29:11