【问题标题】:Need to use instance in static and non-static methods需要在静态和非静态方法中使用实例
【发布时间】:2026-01-31 16:20:03
【问题描述】:

我正在制作一个小文字游戏。开始对话在我的主要(静态)方法中。从那里,它会根据您的选择将您发送到其他方法。

现在我想我需要一个我的类的实例才能工作。

例如:

Program p = new Program();

if(stuff){
    p.room1();
}
else{
    p.room2();
}

在这些其他方法中,全局变量会发生变化。

所以上面的主要方法有:

public bool hasItem = false;

所以 room1() 看起来像,

public void room1(){
    if(stuff){
        p.hasItem = true;
    } 
}

我知道我在用 main 方法搞砸了。我是在主方法内部还是外部声明实例“p”?我都尝试过,但两种方式都会出错。

编辑:我最终在主要方法之外声明了一个静态“程序”以在其他地方使用。感谢您的帮助!

【问题讨论】:

  • 我根本没有关注你的问题。问题是你不知道在哪里声明hasItem?我建议您将其声明为对象的成员变量,该对象代表实际具有 item的事物(房间、世界、玩家等)。
  • 我认为这就是我在方法之外声明它所做的。不是这样吗?

标签: c# methods instance


【解决方案1】:

首先,您可以在 main 方法之外创建一个静态 Program,或者在您的 main 方法中声明一个程序,具体取决于您的架构。

其次,您不必在实例方法中引用您的实例。只需使用字段名称。像这样:

public void room1(){
    if(stuff){
        hasItem = true;
    } 
}

如果您想明确说明,可以使用this.hasItem


或者更好的是,创建一个全新的类来保持您的状态。在具有 main 方法的类中包含实例成员是一种尴尬的设计。

【讨论】: