gpt4 book ai didi

c# - 如何强制其他人遵守子类的特定布局?

转载 作者:太空狗 更新时间:2023-10-29 20:20:12 24 4
gpt4 key购买 nike

我有一个抽象类如下:

public abstract class Node
{
public abstract void run();
}

有些子节点可能具有多个属性作为输入和输出。但是所有的操作都是在每个节点应该实现的 run() 方法中完成的。例如,绘制一条线的节点可能是这样的:

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
{

}

如您所见,我没有关于子类中字段的任何先验信息。 ** 一个节点要成为约定中的有效节点,只需要至少有一个输出。** 我想强制所有其他用户在他们的节点中至少有一个输出所以我可以通过查找应用了 [Output] 属性的字段来通过反射找到它。
这可能吗?
如果是这样,这是最好的方法吗?

谢谢你的帮助


Here提出了同样的问题,但建议的解决方案在运行时解决了它。不过,我一直在寻找面向对象的解决方案。实际上哪一个更符合逻辑?

最佳答案

你可以这样做

public interface IRunnable<T>
{
T Run();
}

然后每个实现此接口(interface)的类都必须提供此运行方法并返回(强类型)结果。

或者如果run方法没有返回结果

public interface IRunnable<T>
{
void Run();
T Value {get;}
}
public class LineNode : IRunnable<Line>
{
[Input]
public Point a;
[Input]
public Point b;

private Line line;
public Line Value { get{return line;}}
public override void run()
{
line = new Line(a, b);
// draw line ...
}

关于c# - 如何强制其他人遵守子类的特定布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30712417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com