2012-03-30 71 views
0

我不想在課堂上創建Form1的新實例,我不想使用static我如何通過/使用公共函數Form1中的類私有變量?

我有這兩個變量,在類的頂部是私人:

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

我不知道我是否理解你需要什麼。
無論如何,你可以嘗試使用公共財產:

public List<float> PointX { get { return Point_X; } } 
public List<float> PointY { get { return Point_Y; } } 
+0

最後,我創建了一個屬性公開列表 _point_X { {{{返回Point_X; } }。謝謝大家。 – user1196715 2012-03-30 15:44:10

2

試試這個:

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

如果我明白了,你想給Point_X外類的只讀訪問。這種方法可以讓你做到這一點。或者你可以使用一個只讀屬性:

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

事情的關鍵是AsReadOnly方法調用,以防止外部類更改集合。如果您直接返回List<T>,則可以由調用者更改。

+0

+1好點約ReadOnlyCollection – sehe 2012-03-30 15:12:26

+0

+1,很好的答案:) – Marco 2012-03-30 15:13:12

+0

但誰說,OP的不希望改變收藏? – Tigran 2012-03-30 15:14:35

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; } } 
0

不能在一個類的內部另一使用私有字段(原因表只是另一個類)。 你可以做什麼,如果限制可訪問性對你很重要,則使用internal關鍵字,而不是private。但是,如果兩個類都在同一個程序集中,它將僅工作

internal List<float> Point_X = new List<float>(); 
internal List<float> Point_Y = new List<float>(); 

要清楚它總是一個好的有一些屬性或方法「包裝」訪問私有字段,但就像我的理解是不是你想要避免的事情,出於某種原因。

1

有兩個解決辦法:

  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 
} 
+0

...雖然這可能會涉及測試一個浮點數的平等,這不會沒有它自己的陷阱...... – 2012-03-30 15:14:46

+0

@DavidM - 的確 - 這就是爲什麼我沒有指定測試本身:) – ChrisF 2012-03-30 15:15:23

+0

我猜想可能是這樣的 - 爲了後人的緣故,我沒有傷害,雖然我認爲... – 2012-03-30 15:17:43

相關問題