Статический (и вложенный!) Класс - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть класс, представляющий игровую сессию, и я хотел бы иметь какой-то порядок, чтобы я мог сделать что-то вроде этого:

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».

Несколько советов, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 01 апреля 2012

Поскольку это статический класс, вы можете получить к нему доступ вот так

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 есть свои Комнаты и Детали. Они специфичны для этих объектов Session.

Теперь вы можете сделать это

Session objSes=new Session();
objSes.Rooms.Load();

Убедитесь, что вы инициализируете свои дочерние свойства (другие классы) перед тем, как получить к ним доступ. В противном случае вы получите исключение нулевой ссылки.

РЕДАКТИРОВАТЬ: Согласно вашему комментарию, вы хотите получить доступ к классу Details внутри класса Rooms. В этом случае я добавлю свойство 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
0 голосов
/ 01 апреля 2012

Ошибка в значительной степени объясняет это. Класс Rooms связан с типом, а не с экземпляром Session (Room является статическим). Вы должны получить доступ к его функциям через Session.Room.Load () и т. Д.

0 голосов
/ 01 апреля 2012

Подсказка будет просто использовать то, что предлагает ошибка:

Session.Rooms.Load();

Объяснить: поскольку Session является типом , то есть не объектом (экземпляр типа) и содержит вложенный статический тип.Поэтому вам все еще нужно обращаться к вложенному статическому типу через тип Session, а не через экземпляр Session.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...