【发布时间】:2015-10-06 16:59:24
【问题描述】:
我正在学习 C#,我正在寻找可能由不良架构引起的问题的解决方案,并且不会影响实际程序。
我想传递包含多个函数且不需要实例化的“某物”(不一定是类),例如,我想在字典中有一个包含小时和任务列表的类,所以,例如,在 12:00 我希望班级“午餐”,但午餐可能取决于其他变量,所以我有一个要检查的字典条目,例如 {12,LunchTask},LunchTask 是 ' 的子类/实现/派生Task',这样我们就可以安全地传递它并调用 SomeTask.Start、SomeTask.Pause、SomeTask.Stop 之类的东西。
我虽然关于使用 Dictionary (int,System.Type) 但无法使其正常工作,我也尝试过静态,但它们不能被子类化,并且据我所知,委托适用于单个函数。我只想在一个 dict 中传递一些东西,它具有无需实例化即可直接访问的功能。我知道一种可行但我觉得非常不雅的解决方案是拥有一个包含所有不同任务实例的静态类。
我不知道有什么更好的方法来实现这样的基本功能,也许我做的一切都非常错误。因此,如果你们能指出我正确的方向,我将不胜感激。提前谢谢你。
这是一些(伪 C#)代码:
public abstract class Task {
public abstract void ExecuteTask ();
public virtual void PauseTask() {Console.WriteLine ("Task Paused")}
public virtual void StopTask() {Console.WriteLine ("Task Stopped")}
}
public class Lunch : Task {
public override void ExecuteTask ()
{
Console.WriteLine ("Lunch Task Started");
}
}
//the following is gonna be instantiated
public class Human {
Dictionary<int, Something> attributions = new Dictionary<int, Something>(){{12, Lunch}};
void ToBeCalledEveryHour () {
int hour = someHour();
if (attributions.ContainsKey(hour))
attributions[hour].ExecuteTask();
}
}
【问题讨论】:
-
如果你不展示任何代码,或者清楚地描述你想要达到的目标,几乎不可能说出你想要什么。听起来您 可能 正在尝试创建
Dictionary<int, Task>或Dictionary<int, Func<Task>>或其他 bcl 委托类型之一,但就目前而言,很难说出您在问什么。 -
@RonBeyer:谢谢,我去看看。 PrestonGuillot:对不起,我要编辑问题并添加一些代码。第一个选项需要一个实例 afaik,我不确定第二个,我要去谷歌搜索它。
-
@PrestonGuillot:我刚刚添加了一些代码,它既不漂亮也不工作,但我希望它能达到目的。
标签: c# oop dictionary architecture