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

我不想在类中创建Form1的新实例,我不想使用static

我有这两个变量在类的顶部是私有的:

 private List Point_X = new List(); private List Point_Y = new List(); 

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

我需要在Form1中,以便我能够键入:

 WireObject1.Point_X // Or WireObject1.anyFunctionherethatwillcontainthePOINT_X 

Point_Y也是如此。

在类中它们是私有的,但是在类中使用公共函数我将能够在Form1中使用它们。

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

 public List PointX { get { return Point_X; } } public List PointY { get { return Point_Y; } } 

试试这个:

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

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

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

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

有两种解决方案:

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

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

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

 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 } 

规范的解决方案是

 private List mPoint_X = new List(); private List mPoint_Y = new List(); public List Point_X { get { return mPoint_X; } } public List Point_Y { get { return mPoint_Y; } } 

不能在另一个类中使用类的私有字段(因为Form只是另一个类)。 如果限制可访问性对您来说很重要,那么您可以使用internal关键字而不是private关键字。 但只有当两个类都在同一个程序集中时才会起作用。

 internal List Point_X = new List(); internal List Point_Y = new List(); 

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