2017-03-28 305 views
-1

,所以我有嵌套類型類是去是這樣的:靜態嵌套類型

namespace MyNamespace 
{ 
    public class User 
    { 
     private int id = 0; 
     private string userId = ""; 
     private string userPassword = ""; 

     public int Id 
     { 
      get { return id; } 
      set { id = value; } 
     } 

     public string UserId 
     { 
      get { return userId; } 
      set { userId = value; } 
     } 

     public string UserPassword 
     { 
      get { return userPassword; } 
      set { userPassword = value; } 
     } 


     public User() 
     { 
      id = 0; 
      userId = ""; 
      userPassword = ""; 
     } 


     public static class SignonInfo 
     { 
      private static string sesstoken = ""; 
      private static DateTime sessstart = new DateTime(); 

      public static string SessToken 
      { 
       get { return sesstoken; } 
       set { sesstoken = value; } 
      } 

      public static DateTime SessStart 
      { 
       get { return sessstart; } 
       set { sessstart = value; } 
      } 
     } 
    } 
} 

我的最終目標在這裏是能夠訪問這樣的嵌套靜態類:

User user = new User(); 
string token = user.SignonInfo.SessToken; 

我試圖避免實例化這樣的類:

User.SignonInfo user = new User.SignonInfo() 

我需要能夠訪問User和SignonInfo cla的屬性小規模企業。

有人能幫助我走上正軌或打我一下,並告訴我我做的一切都錯了嗎?

TIA

+1

如果您嘗試編譯代碼,編譯器將*完全*您做錯了什麼。相信它;它知道它在說什麼。 – Servy

+0

其實上面的代碼編譯得很好,我只是無法訪問xxxxxx.SignonInfo.SessToken,因爲我已經在上面描述過了。 – Nugs

+0

一個代碼片段編譯得很好,另一個沒有。所以你不能這樣做,不編譯。按照編譯的方式,你可以做得很好。無論哪種方式,您都可以通過簡單地編譯代碼來明確地獲得問題的答案。你不需要我們告訴你編譯器已經告訴你什麼。 – Servy

回答

0

的問題是,它是一個靜態類,所以「實例」沒有訪問它。這是一件好事,因爲它可以防止全球狀態僞裝成一個封裝良好的對象。

我建議把嵌套類非靜態,並具有根據需要調用者的User類創建一個實例(也許增加一個public SignonInfo GetSignonInfo()方法。)

+0

謝謝。這很有幫助。 – Nugs

+0

如果你這樣做,那麼代碼將不會有問題說明它應該具有的語義。 – Servy

+0

那麼,它是迄今爲止我得到的最好迴應。至少現在我知道我爲什麼錯了,並有一個合作的建議。 – Nugs

-1

您試圖訪問你的嵌套類爲如果它是外部類的實例的成員。

變化

string token = user.SignonInfo.SessToken;

User.SignonInfo.SessToken;

注意,不要讓每外實例的靜態內部類的實例,只有一個用於整個外類。

+0

這是問題本身提到的所有信息。 – Servy

+0

不,它確實不是。 – JamesFaix

+0

從這個問題中,「我試圖避免像這樣實例化類:'User.SignonInfo user = new User.SignonInfo()'」 – Servy