非静态场方法需要对象方法

时间:2013-11-21 14:53:11

标签: c# object methods static required

我没有使用C#的经验,但作为我们大学模块的一部分,我们必须创建一个老虎机应用程序。我们创建了一个Gambler类,我必须创建一个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;
    }
}

}

3 个答案:

答案 0 :(得分: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 :(得分:1)

因为Cashout继承自Gambler,你可以这样做。这是因为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;

您可能还需要静态构造函数来设置它。

答案 2 :(得分:1)

Tokens不是静态方法,但是您尝试通过静态构造(类级别)访问它。

可以通过将其声明为静态来实现这一点(尽管这不太可能是你想要的)

public static int Tokens { get; public set; }

或通过实例化Gambler

new Gambler().Tokens;