我有一个抽象类如下:
public abstract class Node
{
public abstract void run();
}
Run Code Online (Sandbox Code Playgroud)
有些子节点可能有几个属性作为输入和输出.但是所有操作都是在run()每个Node应该实现的方法中完成的.例如,绘制一条线的Node可能是这样的:
public class LineNode : Node
{
[Input]
public Point a;
[Input]
public Point b;
[Output]
public Line line;
public override void run()
{
line = new Line(a, b);
// draw line ...
}
}
[AttributeUsage(AttributeTargets.Field)]
public class Input : System.Attribute
{
}
[AttributeUsage(AttributeTargets.Field)]
public class Output : System.Attribute
{
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我没有关于子类中字段的任何先前信息.**为了使节点成为常规中的有效节点,只需要至少有一个输出.**我想强制所有其他用户在其节点中至少有一个输出,以便我可以通过反射来找到它寻找应用[Output]属性的字段.
这可能吗?
如果是这样,这是最好的方式吗?
谢谢你的帮助
这里提出了同样的问题,但建议的解决方案在运行时解决了它.我正在寻找面向对象的解决方案.哪一个更合乎逻辑?
如何使用接口并在类中IOutputDefinition定义抽象。所有实施者都必须填写此内容,以便您的代码能够确定实施将产生哪些输出。ICollection<IOutputDefinition>Node
您可以定义任何元数据属性,例如名称、输出类型……甚至包含接口中输出的 Getter 表达式的属性