我不想在课堂上创建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中使用它们。
答案 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)
有两种解决方案:
使变量成为公共属性 - 尽管使用列表存在问题,因此使用ReadOnlyCollection
包装器是解决此问题的方法。
创建一个公共方法,对列表执行所需的操作。
例如,要向列表中添加一个点,您需要:
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>();
要明确的是,拥有一些“包装”私人字段访问权限的属性或方法总是好的,但据我所知,由于某种原因,这不是你想要避免的东西。