我已经阅读了一些与我的问题相关的问题,但我发现它们对某些程序设计非常具体,所以我希望能就我自己的具体案例得到一些建议......
我正在开发一个程序,它允许你根据节点图进行逻辑运算,例如,你有不同类型的节点; CostantNode和Addition节点,您可以绘制两个常量并将它们链接到Addition节点,这样最后一个将处理输入并抛出结果。到目前为止,Node类有一个虚拟方法用于处理:
//Node Logic
public virtual float Process(Dictionary<Guid, Node> allNodes)
{
//Override logic on child nodes.
return Value;
}
此方法覆盖了每个派生的nodeType,例如:
/// <summary>
/// We pass Allnodes in so the Node doesnt need any static reference to all the nodes.
/// </summary>
/// <param name="allNodes"></param>
/// <returns>Addition result (float)</returns>
public override float Process(Dictionary<Guid, Node> allNodes)
{
//We concatenate the different input values in here:
float Result = 0;
if (Input.Count >= 2)
{
for (int i = 0; i < Input.Count; i++)
{
var _floatValue = allNodes[Input[i].TailNodeGuid].Value;
Result += _floatValue;
}
Console.WriteLine("Log: " + this.Name + "|| Processed an operation with " + Input.Count + " input elements the result was " + Result);
this.Value = Result;
// Return the result, so DrawableNode which called this Process(), can update its display label
return Result;
}
return 0f;
}
到目前为止,一切都运行良好,直到我尝试实现一个Hysteris节点,它基本上应该评估一个输入并返回TRUE或FALSE,这是因为我需要返回一个布尔值而不是一个浮点值,我做了它通过在程序的View端解析返回Bool来工作,但我希望能够在特定子节点中自定义Process()返回类型,同样,节点将进程的结果存储在名为Value的float变量中,该变量也在Hysteris我需要节点的值为True或False ......
希望你们能就如何处理这个问题向我提供一些指导,我没有与POO深入合作。
提前致谢。
答案 0 :(得分:5)
C#没有多态返回值的概念。您必须返回包含两个值的结构:
struct ProcessResult
{
public float Value;
public bool Hysteresis;
}
ProcessResult Process(Dictionary<Guid, Node> allNodes)
{
var result = new ProcessResult();
// Assign value to result.Value
// Assign hysteresis to result.Hysteresis
// return result
}
或者我们的模式类似于Framework的TryParse模式:
bool TryProcess(Dictionary<Guid, Node> allNodes, out float result)
{
// Assign value to result
// Return hysteresis
}