2011-02-26 63 views
2


我是C#的新手,我嘗試了幾件事情。我在form1.cs中有一個標籤(名爲'newLabel')。我有一個名爲'methods.cs'的類。在這一類我有方法在不同的類中使用某些變量(C#)

public static void updateLabel() 

我想要做的是:

public static void updateLabel() 
{ 
    newLabel.Text = "New Value"; 
} 

但這不起作用,可能是因爲該方法是在methods.cs和newLabel是在Form1的.cs。
我與聲明的變量有同樣的問題。在methods.cs中我有變量

int value; 

但我無法在form1.cs中使用此變量。我解決了這個問題做

public static int value { get; set; } 

我不知道那是什麼沒有,但它的工作原理,但我不知道我怎麼可以申請這一招用的標籤。
有人可以幫助我嗎?
謝謝!

回答

1

由於您updateLabel方法訪問形式內側的標籤,正確的面向對象的設計將決定這個方法應該是在形式,太。那麼訪問newLabel就沒有問題。

從技術上講:newLabel並不意味着表單對象之外的任何東西。你可以有幾份你的表格,這意味着你的newLabel的幾個副本;它們應該涉及哪些?當然,電腦不會在那裏猜測;它會期望你告訴它你想使用哪種形式。

您無法訪問value變量的原因是因爲它是私有的。如果您已將其更改爲:

public static int value; 

那麼它會起作用。

+1

static關鍵字不需要或者,乾脆公共int值。靜態在他的場景中沒有什麼意義,除非它是一個常量值 – 2011-02-26 17:32:11

+0

這實際上是我嘗試的第一件事情,只是在沒有靜態的情況下嘗試使用公共int值,但後來我並沒有在form1.cs中使用它。 – Brick 2011-02-26 17:40:23

+0

您可以發佈該類的完整代碼以及如何嘗試訪問該變量?這可能會使它更容易理解。你是否首先將該類實例化爲對象? – 2011-02-26 17:48:57

0

從Form1上,請致電mothods類的updateLabel方法:

methods updateMethod = new methods(); 
newLabel.Text = updateMethod.updateLabel(); 

隨着方法的類此方法:

public static string updateLabel(){ 
return "New Value"; 
} 
4

你應該閱讀上漲約OOP和封裝。基本上你想要的形式 訪問另一個對象(類)的私人領域 - 這是由封裝的限制,這就是爲什麼你正在運行到的問題 - 你可以將這些字段和方法,以「公共」接口讓他們周圍類是通過使他們的公共屬性和方法的聲明,即在你的榜樣:

public int Value {get;set;} 

有時組合物時,即在你的榜樣,因爲你的類直接訪問的形式,你可以對你的類的表單屬性:

public Form ViewForm {get;set;} 
3

這將是最好的,如果你學會了從教程C#,但回答這個特定問題在於一種叫「範圍」

本質上,範圍的變量,類,函數和對象的可見性。一個標記爲「private」的變量只能在創建它的東西中看到(如果它是在函數內部創建的,它將始終是私有的,並且函數中定義的任何變量只能在該函數內部使用)。如果它是在類中創建的,則只有該類可以使用它。

變量或表示爲公共函數(這隻能在類的內部實現)可以從類外部看到。爲此,您將調用myClass.myVariable來訪問變量或myClass.myFunction()來訪問函數。

爲了表示對象的使用關鍵字「公開」或「私有」的知名度。注意:這隻適用於類內的變量和函數(它也適用於類內的其他內容,例如嵌套類和結構,但這不在本基本介紹的範圍內)。

例如:

class myClass 
{ 
    private int myInt; 
    public void myfunction() 
    { 
     myInt = 1; 
    } 
} 

這將工作,如敏可以被任何東西所看到裏面myClass的

class myOtherClass 
{ 
    private void myfunction() 
    { 
     myClass myObject = new myClass(); 
     myObject.myInt = 2; 
    } 
} 

這不會像敏是私人爲myObject,只有myObject的可以改變它。 myOtherClass沒有權限,也看不到它。

class myOtherClassTwo 
{ 
    private void myfunction() 
    { 
     myClass myObject = new myClass(); 
     myObject.myFunction(); 
    } 
} 

幸運的是,這將工作。 myFunction在myClass類中被設置爲public,所以它可以被課堂外的任何人看到。

現在您使用關鍵字static有着完全不同的意義。我建議你在使用之前不要使用它,因爲只會增加你的問題的複雜性。

我希望這茅塞頓開,雖然我必須敦促你遵循一些真正的教程,因爲這些基礎知識,必須徹底詳細的,否則你會在後面抓出來。

相關問題