[英]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.