2017-08-11 126 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关键字表示该字段对于此类的所有实例都是相同的。

相关问题