簡體   English   中英

我如何通過公共函數在Form1中的類中傳遞/使用私有變量?

[英]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> ,則調用者可以更改它。

有兩種解決方案:

  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
}

我不知道我是否了解您的需求。
無論如何,您可以嘗試使用公共財產:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM