如何通过公共函数传递/使用表单1中的类的私有变量?

时间:2012-03-30 15:07:54

标签: c#

我不想在课堂上创建Form1的新实例,我也不想使用static

我有两个在课堂顶部是私有的变量:

private List<float> Point_X = new List<float>();
private List<float> Point_Y = new List<float>();

现在在Form1中,我为新类创建了一个新实例:WireObject1

我需要在Form1中使用,以便我能够输入:

WireObject1.Point_X
// Or 
WireObject1.anyFunctionherethatwillcontainthePOINT_X

Point_Y相同。

在课堂上他们是私人的,但在课堂上使用公共函数我将能够在Form1中使用它们。

5 个答案:

答案 0 :(得分:2)

试试这个:

public ReadOnlyCollection<float> GetXValues()
{
    return Point_X.AsReadOnly();
}

如果我理解,您希望在课堂外提供对Point_X的只读访问权限。这种方法可以让你这样做。或者您可以使用只读属性:

public ReadOnlyCollection<float> XValues
{
    get
    {
        return Point_X.AsReadOnly();
    }
}

关键是AsReadOnly方法调用以防止对类外部集合的更改。如果直接返回List<T>,则调用者可以更改它。

答案 1 :(得分:1)

有两种解决方案:

  1. 使变量成为公共属性 - 尽管使用列表存在问题,因此使用ReadOnlyCollection包装器是解决此问题的方法。

  2. 创建一个公共方法,对列表执行所需的操作。

  3. 例如,要向列表中添加一个点,您需要:

    public void AddValueToX(float value)
    {
        PointX.Add(value);
    }
    

    如果你想测试一个值是否在列表中(在处理单精度值时充满了危险):

    public bool InListX(float value)
    {
        // A test on value vs the data in Point_X allowing for floating point inaccuracies
    }
    

答案 2 :(得分:0)

我不知道我是否明白你的需要 无论如何,你可以尝试使用公共财产:

public List<float> PointX { get { return Point_X; } }
public List<float> PointY { get { return Point_Y; } }

答案 3 :(得分:0)

规范解决方案是

private List<float> mPoint_X = new List<float>();
private List<float> mPoint_Y = new List<float>();

public List<float> Point_X { get { return mPoint_X; } }
public List<float> Point_Y { get { return mPoint_Y; } }

答案 4 :(得分:0)

不能在另一个类中使用类的私有字段(因为Form只是另一个类)。 您可以做的事情,如果限制可访问性对您很重要,则使用internal关键字,而不是private。但如果两个类都在同一个程序集中,它将仅

internal List<float> Point_X = new List<float>();
internal List<float> Point_Y = new List<float>();

要明确的是,拥有一些“包装”私人字段访问权限的属性或方法总是好的,但据我所知,由于某种原因,这不是你想要避免的东西。