2017-02-28 83 views
-5

我有哪裏我聲明一個類變量,但是當我在方法中使用他們的示例代碼中聲明的變量,值變爲零。請查找下面的代碼進一步的細節。如何初始化一個類

class RectangleExample 
{ 
    double i; 
    double j; 

    public void GetValues() 
    { 
     i = 2.5; 
     j = 3.5; 
    } 

    public double GetArea() 
    { 
     return i * j; 
    } 

    public void Display() 
    { 
     Console.WriteLine("Length: {0}", i); 
     Console.WriteLine("width: {0}", j); 
     Console.WriteLine("Area: {0}", GetArea()); 
    } 
} 

class ExecuteRectangle 
{ 
    static void Main(string[] args) 
    { 
     RectangleExample obj1 = new RectangleExample(); 
     obj1.Display(); 
     Console.ReadKey(); 
    } 
} 
+1

分享你的代碼。 –

+1

*「請找到下面的代碼」*找不到它......你把它藏在哪裏? –

+2

您是否聽說過構造函數? :) – C1sc0

回答

-1

嘗試增加getter和setter方法是這樣的: (假設你在C#3.5在以上工作)

給變量public屬性以及設置get/set屬性將確保您可以完全訪問整個班級的變量,也可以訪問變量之外的變量。

我敢肯定有更好的方法來解決這個問題,但是這是我認爲的:

class RectangleExample 
{ 
    public double i{get;set;}=0; 
    public double j{get;set;}=0; 
... 
... 
... 
} 
+2

這是錯誤的。它沒有解釋OP做錯了什麼。 – pinkfloydx33

+0

@ pinkfloydx33顯然爲他工作。我會盡快更新答案以解釋「爲什麼」。 – Joel

+0

如果*他*所做的是將他的字段轉換爲屬性,我不明白這怎麼可能 – pinkfloydx33

0

內,您的顯示方法,調用GetValues方法之前,首先Console.WriteLine

空值越來越是怎麼一回事,因爲你沒有初始化的變量的值,該值將在GetValues方法來初始化和你沒「T隨時隨地把它稱爲​​在你的代碼

5

你永遠不會調用該方法GetValues()所以沒有值都曾經分配給ijdouble的默認值爲0.

在致電Display()之前,您需要致電GetValues()

class ExecuteRectangle 
{ 
    static void Main(string[] args) 
    { 
     RectangleExample obj1 = new RectangleExample(); 
     obj1.GetValues(); // <-- HERE 
     obj1.Display(); 
     Console.ReadKey(); 
    } 
} 

另外,正如你所提到的,而不是在構造函數中賦值。

public RectangleExample() 
{ 
    i = 2.5; 
    j = 3.5; 
} 

由於Thomas Schremser明智地指出,在評論的名義「的GetValues」是不好的做法時,該方法不得到什麼,也許是「setValues方法」至少是稍微好一點。

0

每個類都有constructor。每當創建了一個classContructor調用。 如果你不爲你的對象constructorC#將創建一個默認實例化對象和設置成員變量的缺省值。

你的代碼有沒有constructor那麼你的財產(i,j)設定的默認值(0) 可以調用GetValues方法之前Display方法或可以使用我的樣本。

所以嘗試這

class RectangleExample 
{ 
    double i ; 
    double j ; 

    // class will be created calling `contructor`. Constructor will be call GetValues or set i , j values for my answer. 
    RectangleExample() 
    { 
    //i = 2.5; 
    //j = 3.5; 
    GetValues(); 
    //or 
    i = 2.5; 
    j = 3.5; 
    //GetValues(); 
    } 
    public void GetValues() 
    { 
     i = 2.5; 
     j = 3.5; 
    } 

    public double GetArea() 
    { 
     return i * j; 
    } 

    public void Display() 
    { 

     Console.WriteLine("Length: {0}", i); 
     Console.WriteLine("width: {0}", j); 
     Console.WriteLine("Area: {0}", GetArea()); 

    } 
}