[英]How can i pass/use private variables froma class in Form1 with a public function?
我不想在类中创建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中使用它们。
尝试这个:
public ReadOnlyCollection<float> GetXValues()
{
return Point_X.AsReadOnly();
}
据我了解,您想在类之外授予对Point_X
只读访问权限。 此方法将允许您执行此操作。 或者,您可以使用只读属性:
public ReadOnlyCollection<float> XValues
{
get
{
return Point_X.AsReadOnly();
}
}
关键是AsReadOnly
方法调用,以防止在类外部对集合进行更改。 如果直接返回List<T>
,则调用者可以更改它。
有两种解决方案:
使变量成为公共属性-尽管列表的使用存在问题,所以使用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
}
我不知道我是否了解您的需求。
无论如何,您可以尝试使用公共财产:
public List<float> PointX { get { return Point_X; } }
public List<float> PointY { get { return Point_Y; } }
规范的解决方案是
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; } }
您不能在另一个内部使用一个类的私有字段(因为Form只是另一个类)。 如果限制可访问性对您很重要,您可以做的是使用internal
关键字,而不是private
。 但是, 只有两个类都在同一程序集中,它才有效 。
internal List<float> Point_X = new List<float>();
internal List<float> Point_Y = new List<float>();
要明确的是,拥有一些“包装”对私有字段的访问权的属性或方法总是很好的,但是据我所知,出于某种原因,这不是您想要避免的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.