2010-07-20 34 views
2

好吧......我對我能做什麼和我在CLASS SCOPE中做不到的事感到困惑。爲什麼有些事情我不能在C#中的CLASS SCOPE中做?

例如

=========================

class myclass 
{ 


    int myint = 0; 

    myint = 5; *// this doesnt work. Intellisense doesn't letme work with myint... why?* 

    void method() 
    { 
    myint = 5; *//this works. but why inside a method?* 
    } 
} 

======== ==========================

class class1 
{ 
public int myint; 
} 

class class2 
{ 
    class1 Z = new class1(); 

    Z.myint = 5; *//this doesnt work. like Z doesnt exists for intellisense* 

void method() 
    { 
    Z.myint = 5; *//this Works, but why inside a method?* 
    } 
} 

,這是我做這麼多的錯誤,我不明白階級是什麼在起作用範圍和什麼不工作。

我知道有局部變化和它的生命週期。但我不明白這個想法。

+0

傑弗裏裏氏「通過C#,第三版CLR」你需要添加一個構造函數(http://msdn.microsoft。 com/en-us/library/ms173115.aspx)如果您想要Field Iinitializers的替代品 – SwDevMan81 2010-07-20 15:48:09

+0

另請參閱(http://msdn.microsoft.com/zh-cn/library/aa691132(VS.71).aspx)for範圍語言規範 – SwDevMan81 2010-07-20 15:50:47

+3

這是一個非常基本的問題,所以你不應該停下來閱讀我們的答案。相反,你會從初學者的教程中受益。 – 2010-07-20 15:56:39

回答

8

一個類可以只包含聲明初始化,和方法。它不能包含自己的陳述

class MyClass 
{ 
    int x; // a declaration: okay 
    int y = 5; // a declaration with an initialization: okay 
    int GetZ() { return x + y; } // a method: okay 

    x = y; // a statement: not okay 
} 
+1

+1:需要的任何「類作用域語句」都需要放在構造函數中。 – 2010-07-20 15:51:33

+0

+1:沒有「運行」類,只能運行類中的方法(包括ctors和properties)。 – 2010-07-20 15:53:08

+0

我們可能應該注意到屬性在這裏算作方法。 – 2010-07-20 15:55:49

1

您可以初始化一個字段,但不能只是賦值語句。

+0

這個答案看起來是正確的,那麼爲什麼它被低估? – 2010-07-22 19:30:25

0

基本上,當你創建一個類時,你不允許直接在這個類內部分配代碼&。

但作爲C#想幫助你,它允許你定義字段的初始狀態。他們基本上直接執行bevore你的構造函數代碼。

當你現在想要定義類內的代碼。某處......程序不知道什麼時候執行。所以他們被禁止。

1

你不能做以下:

class myclass 
{ 
    int myint = 0; 
    myint = 5; 

,因爲沒有什麼做的,你只能申報成員和可能設置的初始值。這與範圍無關。你無法做到的其中一個原因是沒有訂單保證,編譯器只保證所有的值都會在實例化類時被初始化。這就是爲什麼你還不能做到以下幾點:如果你想設置的值時,類實例化,把它的構造器

class myclass 
{ 
    int myint = 0; 
    int MyOtherInt = myint; 

+0

但是如果班上有這個命令? class1 { int a; void method(); int b; } 會是這樣的順序嗎? a,方法b。 ??? 「b」在執行「方法」之前無法初始化,對嗎? – user396808 2010-07-20 16:27:51

+1

在類定義中,方法不執行,只是聲明它們,所以在你的例子中方法根本不會執行。 – 2010-07-20 16:39:21

+0

但是,你的意思是「沒有訂單的保證」? – user396808 2010-07-20 17:15:36

0

類定義定義了它的構成,即它包含的字段,屬性,方法,事件等。 「工作」實際上是在方法內完成的。

你似乎很困惑的是類的字段的初始化與這些字段的用法。你可以初始化一個方法定義外的字段,但要使用它,你需要在一個方法內。

相關問題