我有一个代表游戏会话的课程,我希望有某种顺序,这样我就能做到这样的事情:
public class Session
{
public static class Rooms
{
// All the things about session's rooms etc
public static void Load()
{
// Load stuff...
}
}
public static class Details
{
// All the session details (username, age...)
}
// etc
}
通过这种方式,一切都更有条理,每个嵌套类都可以处理特定的东西......
但是,当然,有一个问题......
当我有一个Session类的实例时,我尝试执行以下操作:
Session x = new Session();
x.Rooms.Load();
我收到如下错误:
无法通过表达式引用类型。请尝试'Program.Session.Rooms'。
请给我一些提示?
答案 0 :(得分:0)
提示只是使用错误建议的内容:
Session.Rooms.Load();
解释:由于Session
是类型,即不是对象(类型的实例),并且包含嵌套的静态类型。因此,您仍然必须通过类型Session
访问嵌套的静态类型,而不是通过Session
的实例访问。
答案 1 :(得分:0)
由于它是静态类,您可以像这样访问它
Session.Rooms.Load();
编辑:根据您的评论,您可能应该更改此类结构
每个“Session”类代表一个不同的游戏会话,但每个 他们应该可以访问其他课程,“房间”,“详细信息
public class Session
{
public Rooms SessionRooms { set;get;}
public Details SessionDetails { set;get;}
}
public class Rooms
{
public void Load() {}
}
public class Details()
{
}
这里每个Session对象都有自己的Rooms和Details。这些特定于那些Session对象。
现在你可以这样做
Session objSes=new Session();
objSes.Rooms.Load();
确保在访问子属性之前初始化它们(其他类)。否则,您将获得空引用异常。
编辑:根据您的评论,您想要访问Rooms类中的Details类。在这种情况下,我会将ParentSession属性添加到我的Rooms类中,如下所示
public class Rooms
{
public Session ParentSession { set;get;}
public Rooms(Session parent)
{
this.ParentSession=parent;
}
public void Load() {}
}
在SessionClass中,将父类对象传递给Rooms类的构造函数
public class Session
{
public Rooms SessionRooms { set;get;}
public Details SessionDetails { set;get;}
public Session()
{
if(this.SessionRooms==null)
{
this.SessionRooms=new Room(this);
}
if(this.SessionDetails ==null)
{
this.SessionDetails =new Details(this);
}
}
}
您可以像这样从房间访问详细信息
Session objSes=new Session();
//do something...
Room theRool=objSes.Room;
//now to access the details like
theRoom.ParentSession.SessionDetails
答案 2 :(得分:0)
错误几乎解释了它。 Rooms类与类型相关联,而不是与Session的实例相关联(Room是静态的)。您必须通过Session.Room.Load()等访问其功能。