2016-10-19 9 views
-4

私はプロジェクトを持っています。主なメソッドの1つは、値が割り当てられているのが分かりやすいときにnullを返すことです。メソッドGetServer()が不明な理由でnullを返す

のProgram.cs:

using System; 

namespace Sahara 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.ForegroundColor = ConsoleColor.Yellow; 
      Console.Title = "Loading Sahara..."; 
      Console.CursorVisible = false; 

      Sahara.Initialize(); 

      while (true) 
      { 
       Console.ReadKey(); 
      } 
     } 
    } 
} 

Sahara.cs:

namespace Sahara 
{ 
    class Sahara 
    { 
     private static SaharaServer server; 

     public static void Initialize() 
     { 
      server = new SaharaServer(); 
     } 

     public static SaharaServer GetServer() 
     { 
      return server; 
     } 
    } 
} 

SaharaServer: 

using Sahara.Core.Config; 
using Sahara.Core.Logging; 
using Sahara.Core.Server; 
using System; 
using System.Diagnostics; 

namespace Sahara 
{ 
    class SaharaServer 
    { 
     private readonly ServerStatusUpdater serverStatusUpdater; 
     private readonly LogManager logManager; 
     private readonly ServerInformation serverInformation; 
     private readonly DateTime startedTime; 
     private readonly ConfigManager configManager; 

     public SaharaServer() 
     { 
      logManager = new LogManager(); 
      serverInformation = new ServerInformation(); 

      foreach (string consoleOutputString in serverInformation.ConsoleLogo) 
      { 
       Console.WriteLine(consoleOutputString); 
      } 

      logManager.Log("Loading " + serverInformation.ServerName + "...", LogType.Information); 

      Stopwatch stopwatch = Stopwatch.StartNew(); 

      configManager = new ConfigManager("Extra/Other/config.ini"); 

      startedTime = DateTime.Now; 

      serverStatusUpdater = new ServerStatusUpdater(); 

      stopwatch.Stop(); 
      logManager.Log("Finished Loading! [" + stopwatch.ElapsedMilliseconds + "ms]", LogType.Warning); 

      Console.ForegroundColor = ConsoleColor.Black; 
     } 

     public LogManager GetLogManager() 
     { 
      return logManager; 
     } 

     public ServerInformation GetServerInformation() 
     { 
      return serverInformation; 
     } 

     public DateTime StartedTime 
     { 
      get { return startedTime; } 
     } 

     public ConfigManager GetConfigManager() 
     { 
      return configManager; 
     } 

     public void Dispose() 
     { 
      try 
      { 
       serverStatusUpdater.Dispose(); 
      } 
      catch (Exception exception) 
      { 
       if (logManager != null) 
       { 
        logManager.Log("Error in disposing SaharaServer: " + exception.Message, LogType.Error); 
        logManager.Log(exception.StackTrace, LogType.Error); 
       } 
      } 
      finally 
      { 
       Environment.Exit(0); 
      } 
     } 
    } 
} 

しかし、なぜSahara.csで、単にgetServer()がnullを返している!!?!?!?!?

+2

GetServer()呼び出しはどこにありますか? – Andre

+0

あなたは実際にどこでもメソッドを呼び出すわけではありません。そのメソッドが値を返すためには、メソッドを呼び出す必要があります。 – David

+0

この質問とは関係のない別のクラスでは、読み込む必要のないクラスで質問を積み重ねたくありませんでした。単に "Sahara.GetServer();"というように呼びます。 –

答えて

3

あなたがSaharaServerコンストラクタ内からConfigManagerコンストラクタを呼び出すので、コンストラクタはまだserverフィールドを設定するために完了していないので、GetServernullを返します。

+0

それです、コードで確認しました。 – Andre

関連する問題