如何强迫他人服从子类的特定布局?

a.t*_*aby 7 c# oop reflection

我有一个抽象类如下:

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]属性的字段.
这可能吗?
如果是这样,这是最好的方式吗?

谢谢你的帮助


这里提出了同样的问题,但建议的解决方案在运行时解决了它.我正在寻找面向对象的解决方案.哪一个更合乎逻辑?

eFl*_*loh 1

如何使用接口并在类中IOutputDefinition定义抽象。所有实施者都必须填写此内容,以便您的代码能够确定实施将产生哪些输出。ICollection<IOutputDefinition>Node

您可以定义任何元数据属性,例如名称、输出类型……甚至包含接口中输出的 Getter 表达式的属性