C# 需要在静态和非静态方法中使用实例

C# 需要在静态和非静态方法中使用实例,c#,methods,instance,C#,Methods,Instance,我在做一个文字游戏。开始对话是我的主要(静态)方法。然后,它会根据您的选择将您发送到其他方法 现在我想我需要一个我的类的实例来实现这个 例如: Program p = new Program(); if(stuff){ p.room1(); } else{ p.room2(); } 在这些其他方法中,有一些全局变量将发生变化 因此,在主要方法之上有: public bool hasItem = false; 所以room1()看起来像 public void room1()

我在做一个文字游戏。开始对话是我的主要(静态)方法。然后,它会根据您的选择将您发送到其他方法

现在我想我需要一个我的类的实例来实现这个

例如:

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”?两种方法我都试过,但都有错误


编辑:我最终在main方法之外声明了一个静态“程序”,以便在其他地方使用。谢谢你的帮助

首先,您可以在主方法之外创建一个静态
程序,也可以在主方法内部声明一个程序,具体取决于您的体系结构

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

public void room1(){
    if(stuff){
        hasItem = true;
    } 
}
如果您想明确说明,可以使用
this.hasItem



或者更好的是,创建一个全新的类来保持你的状态。在类中使用main方法包含实例成员是一种笨拙的设计。

首先,您可以在主方法之外创建一个静态
程序,或者在主方法内部声明一个程序,具体取决于您的体系结构

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

public void room1(){
    if(stuff){
        hasItem = true;
    } 
}
如果您想明确说明,可以使用
this.hasItem



或者更好的是,创建一个全新的类来保持你的状态。在类中使用main方法包含实例成员是一种笨拙的设计。

我完全不理解你的问题。问题是您不知道在哪里声明
hasItem
?我建议您将它声明为对象的成员变量,该对象表示实际包含该项的对象(房间、世界、玩家等)。我想这就是我在方法之外声明它所做的。不是这样吗?我根本不明白你的问题。问题是您不知道在哪里声明
hasItem
?我建议您将它声明为对象的成员变量,该对象表示实际包含该项的对象(房间、世界、玩家等)。我想这就是我在方法之外声明它所做的。不是这样吗?