2013-11-21 53 views
0

我沒有使用C#的經驗,但作爲我們大學模塊之一,我們必須創建一個老虎機應用程序。我們創建了一個賭徒類,我必須創建一個CheckBalance類,我將從Gambler類中調用Token方法。但是我收到了在主題標題中提到的錯誤。非靜態字段方法需要對象方法

Int tokens = Gambler.Tokens; 

上述行是我得到我的錯誤。 這是我的代碼:

enter code herenamespace CasinoClasslibrary 
{ 
public class Gambler 
{ 
    public string Name { get; private set; } 

    public int Age { get; private set; } 

    public long CreditCardNum { get; private set; } 

    public int Tokens { get; public set; } 

    public string Username { get; private set; } 

    public string Password { private get; public set; } 

    public Gambler(string Name, int Age, long CreditCardNum, int Tokens, string Username, string Password) 
    { 
     this.Name = Name; 
     this.Age = Age; 
     this.CreditCardNum = CreditCardNum; 
     this.Tokens = Tokens; 
     this.Username = Username; 
     this.Password = Password; 
    } 
} 

public class Cashout : Gambler 
{ 
    public Boolean CheckBalance() 
    { 

     int tokens = Gambler.Tokens; 
     return true; 
    } 
} 

}

回答

1

因爲你是從Gambler繼承我懷疑你需要訪問base.Tokens,如:

public Boolean CheckBalance() 
{ 
    int tokens = base.Tokens; //here 
    return true; 
} 

否則因爲Toakens是一個實例成員你必須創建Gambler的對象,然後訪問它。

您的代碼中還存在其他錯誤。您尚未在基類中定義默認的(參數較少)構造函數,您需要調用子類中的現有基構造函數。

public class Cashout : Gambler 
{ 
    public Cashout() 
     : base("",0, 0, 1, "", "") //something like this 
    { 
    } 
    public Boolean CheckBalance() 
    { 
     int tokens = base.Tokens; 
     return true; 
    } 
} 
1

因爲Cashout繼承了賭徒,你可以這樣做。這是因爲Cashout實例也具有Tokens屬性。

public class Cashout : Gambler 
{  
    public Boolean CheckBalance() 
    { 

    int tokens = Tokens; 
    return true; 
    } 
} 

但是,如果你想要的方法是靜態的,你需要的Gambler實例訪問屬性,這應該被傳遞到靜態方法本身。

public class Cashout : Gambler 
{  
    public static Boolean CheckBalance(Gambler myGambler) 
    { 

    int tokens = myGambler.Tokens; 
    return true; 
    } 
} 

最後,如果你打算在Tokens屬性是靜態的本身,你需要將其申報爲這樣

public static int Tokens; 

您可能還需要一個靜態構造函數來設置它。

1

Tokens不是靜態方法,但您嘗試通過靜態構造(類級別)訪問它。

可以通過聲明爲靜態(儘管這可能不是你想要的)

public static int Tokens { get; public set; } 

或通過實例賭徒

new Gambler().Tokens; 
使這項工作
相關問題