0

所以无论如何我在实践中对 C# 还是相当陌生。我花了一些时间学习,但实际上在实践中使用它。嗯。所以这是总目标

我需要构建“Example”的多个实例,每个实例都应包含其自己的单独列表,该列表跟踪另一个名为 Inputs 的类的多个实例......并且以后能够引用它们。我希望有一种方法可以或多或少地标记每个实例,以便我可以通过特定标签调用单个实例。

我的困境:我的类“Example”将被实例化多次,并且每个实例还需要根据“_numInputs”变量指示的数量多次实例化另一个类“Input”。我会让“示例”类每隔一段时间检查一次“_numInputs”,以便在“输入”列表中添加或删除“输入”。如何跟踪类的各个实例?如有必要,特别是删除特定实例。

注意:我已经研究过闭包,据我了解,闭包主要集中于“标记”方法/函数的独特“类型”......但不是类的实例......如果我错了,你能提供一个我如何标记类的每个实例以便以后可以直接引用它而不影响同一类的其他实例的简单示例?

public class Example
{
    public List<Input> inputs = new List<Input>();
    public Example(int numInputs = 1)
    {
        for (int i = 0; i < _numInputs; i++)
        {
            inputs.Add(new Input());
        }
    }
}
4

1 回答 1

1

是的,静态字段对于应用程序域是全局的。所以...不要让它静态?实际上听起来它应该是构造函数的一部分,可能默认值为 1 - 所以:

private Input[] _inputs;
public Node(int numInputs = 1) {
    _inputs = new Input[numInputs];
    for(int i = 0 ; i < _inputs.Length ; i++) {
        _inputs[i] = new Input();
    }
}

请注意,由于构造函数是您唯一使用此数字的时间,因此没有必要为每个实例存储它。您当然可以通过以下方式将其暴露给外界:

public int InputCount => _inputs.Length;

请注意,这仅在“输入”的数量在实例化时固定时才有效。如果不是,那么坦率地说:使用列表:

private List<Input> _inputs = new List<Input>();
public Node() {} // not strictly needed unless there is another constructor somewhere

如果问题是字段初始值设定项顺序,则根据评论反馈进行编辑:

private int _numInputs;
private Input[] _inputs;

public Example() {
    _numInputs = 1;
    _inputs = new Input[_numInputs];
    for(int i = 0; i < _inputs.Length; i++) {
        _inputs[i] = new Input();
    }
}
于 2017-11-27T10:37:18.987 回答