2014-09-19 3 views
0

Как получить доступ к переменной из другого класса без ее восстановления?Переменная доступа C# из другого класса без восстановления класса

Класс # 1:

namespace Server.world 
{ 
    public class WorldData 
    { 
     private entitys.Player[] Players = new entitys.Player[Convert.ToInt16(ConfigurationManager.AppSettings["maxplayers"])]; 

     public entitys.Player this[int i] 
     { 
      get { return Players[i]; } 
      set { Players[i] = value; } 
     } 
    } 
} 

Класс # 2: построение worldData класс:

namespace Server 
{ 
    class StartUp 
    { 
     public Server.tcpserver.TcpServer ListenerTcp = new Server.tcpserver.TcpServer(); 
     public world.WorldData WorldData = new world.WorldData(); 

     /// <summary> 
     /// Server start function 
     /// </summary> 
     public void Start() 
     { 
      string rootFolder = ConfigurationManager.AppSettings["rootfolder"]; 

      if (!Directory.Exists(rootFolder)) 
      { 
       Directory.CreateDirectory(rootFolder); 
       string pathString = Path.Combine(rootFolder, "world"); 
       Directory.CreateDirectory(pathString); 
      } 

      ListenerTcp.StartListening(); 
      //No code below this point 
     } 
    } 
} 

Класс # 3:

namespace Server.tcpserver 
{ 
    class TcpServer 
    { 
     int counter = 0; 

     public void StartListening() 
     { 
      IPAddress ipAddress = Dns.GetHostEntry("127.0.0.1").AddressList[0]; 
      TcpListener serverSocket = new TcpListener(8888); 
      TcpClient clientSocket = default(TcpClient); 

      serverSocket.Start(); 
      counter = 0; 

      while (true) 
      { 
       counter += 1; 

       clientSocket = serverSocket.AcceptTcpClient(); 
       Server.client.Client Client = new Server.client.Client(clientSocket); 
       Console.WriteLine("Player Connected!"); 
       //get world playerdata here 
      } 
     } 
    } 
} 

Как мне это сделать? Я повсюду искал, но не смог найти его.

+0

Где вы создать экземпляр класса 3? Вы можете передать объект 'WorldData' в конструкторе. Вы можете создать экземпляр внутри своего класса 3 – paqogomez

+0

Как относятся классы 'StartUp' и' Class3' друг к другу? –

+0

вы можете получить доступ к элементам без установки только путем преобразования класса в «статический» –

ответ

1

В одном из способов вы можете предоставить конструктор, который принимает экземпляр WorldData или даже экземпляр StartUp, который предоставляет свойство WorldData как свойство.

public class TcpServer 
{ 
    int counter = 0; 
    private StartUp startUp: 

    public TcpServer(StartUp startUp) 
    { 
     this.startUp = startUp; 
    } 

    public void StartListening() 
    { 
     // ... 
     var worldData = this.startUp.WorldData;  // <--- !!! 
     // ... 
    } 

    // ... 
} 

Теперь я хотел бы также использовать конструктор StartUp для инициализации TcpServer:

public class StartUp 
{ 
    public StartUp() 
    { 
     WorldData = new world.WorldData(); 
     ListenerTcp = new Server.tcpserver.TcpServer(this); // <--- !!! 
    } 

    public Server.tcpserver.TcpServer ListenerTcp; 
    public world.WorldData WorldData; 
    // ... 
} 
+0

Спасибо, это выглядит как чистое решение, но как насчет того, чтобы класс, содержащий массив, был статичным? –

+0

@StijnBernards: зачем вам это нужно? Вы хотите поддержать только один мир? Статический класс может содержать только статические элементы, которые, конечно же, не то, что вы хотите. –

+0

Ну, я хочу 1 класс worldData, который содержит все данные игрока и несколько уровней. Я использую класс WorldData, например, uhh ... Ну, файл, в котором я сохраняю всю общедоступную переменную, которую должны редактировать другие классы. –

Смежные вопросы