2017-08-11 107 views
0

我試圖建立一個創建水平通過其構造的對象一個非常基本的系統:如何將不同的變量值賦給同一對象的不同實例?

class Levels 
{ 
    // private level properties 
    private static string levelName { get; set; } 
    private static int levelSize { get; set; } 
    private static int levelNum { get; set; } 

    // new level constructor. Takes name, size (to square) and level number. 
    public Levels(string inName, int inSize, int inNum) 
    { 
     levelName = inName; 
     levelSize = inSize; 
     levelNum = inNum;      
    } 

    // ... GetLevel methods here... 
} 

,並將這些值分配給對象的每個特定實例。然而,輸出表明,levelName,levelSize和levelNum變量並沒有正確地「貼」在每個實例上。

class Program 
{ 
    static void Main(string[] args) 
    { 
     var Level1 = new Levels("Forest", 15, 1); 
     var Level2 = new Levels("Desert", 22, 2); 

     Console.WriteLine($"--- {Level1.GetLevelName()}, level {Level1.GetLevelNum()} ---"); 
     Console.WriteLine($"--- {Level2.GetLevelName()}, level {Level2.GetLevelNum()} ---"); 

     Console.ReadLine(); 
    } 
} 

// output: 
//  --- Desert, level 2 --- 
//  --- Desert, level 2 --- 
// why is level 1 not displaying here? 

我知道,如果我是第一的WriteLine命令後,移動2級的構造會,hamfistedly,工作,但顯然我需要這些值來堅持自己的實例。

+0

您不能擁有對象的實例。對象是類*的實例*等。 – idmean

+0

哎呀!是的,你說得對,謝謝你指出。 –

回答

7

關鍵字static意味着該變量不實例水平,但水平。含義您的變量將在您的Levels類的所有實例中共享。

我會建議它重寫:

public class Levels 
{  
    public string LevelName { get; private set; } 
    public int LevelSize { get; private set; } 
    public int LevelNum { get; private set; } 

    // new level constructor. Takes name, size (to square) and level number. 
    public Levels(string inName, int inSize, int inNum) 
    { 
     LevelName = inName; 
     LevelSize = inSize; 
     LevelNum = inNum;      
    } 
} 

你的變量是private static的相反,你現在將使用屬性有一個私人二傳手(這意味着他們只能在類中進行設置)。現在,您的實例Levels具有各自的值,實例之間不會共享任何內容。這也將給你額外的獎勵,消除您的GetLevelName(),GetLevelNum()等方法的需要。你現在可以說:

Console.WriteLine($"--- {Level1.LevelName}, level {Level1.LevelNum} ---"); 

我做了一個小提琴here演示。

+1

看起來像@maccettura打了我一分鐘左右。 –

+1

是的,這是有道理的,謝謝! –

+0

@ErinW。不客氣,祝你好運! – maccettura

2

從字段中刪除static關鍵字。基本上static關鍵字表示該字段對於此類的所有實例都是相同的。

相關問題