引用其他类的形状列表

时间:2015-03-18 16:20:37

标签: c#

我希望能够引用列表并查看所有方法,以及从其他类中更改列表的内容。

以下是声明:

public partial class TestSheet : UserControl
{
    public ShapeCollection _shapes = new ShapeCollection();
}

这是ShapeCollection类:

/// <summary>
/// Manages a collection of shape objects
/// </summary>
public class ShapeCollection : CollectionBase
{
    public void Add(Shape s)
    {
        List.Add(s);
    }

    public void Remove(Shape s)
    {
        List.Remove(s);
    }

    public Shape this[int index]
    {
        get { return (Shape)List[index]; }
        set { List[index] = value; }
    }
}

我可以使用:

来引用_shapes
this._shapes.Add(s);

或:

foreach (Shape s in this._shapes)
{
     //some code
}

或表格上的索引:

Shape shp;
shp = (Shape)testSheet1._shapes[TestSheet.selectedShapeNumber];

唯一可以引用_shapes的类是UserControl所在的表单和UserControl本身。 如何以不同方式声明_shapes,以便可以在其他类中引用和操作_shapes。我很难过。我知道这可能很简单。请帮忙。

2 个答案:

答案 0 :(得分:1)

您的声明是正确的。问题在于你宣布它。现在,_shapes是您TestSheet的成员。如果您希望可以从其他位置访问您的集合,则应将声明移动到其他位置,例如作为表单的成员(而不是控件)。这样,任何引用表单的类都可以通过

引用它
myform._shapes.Add(s);

请记住,如果您希望每个表单可以访问多个TestSheet,则可以使用相同的集合。如果您想要按TestSheet单独收集,请保留现有的

答案 1 :(得分:0)

您必须将对_shape的引用传递给其他类,或者将对其容器(TestSheet)的引用传递给其他类。

这样的事情:

public class Manipulator {
    private ShapeCollection shapes;

    public Manipulator(ShapeCollection shapes) {
        this.shapes = shapes;
    }

    public void doSomethingToShapes() {
        shapes.add(...);
    }
}

public static void main(String[] args) {
    TestSheet testSheet = new TestSheet();
    Manipulator manipulator = new Manipulator(testSheet._shapes);
    ...
}