2016-11-24 84 views
0

Bofore我想問一下我的問題,請閱讀follwing類:投射泛型類? - >混亂的結果

public class JsonPackage<A> : USOPackage 
{ 

    public JsonPackage(PackageHeader header, object o) : base(header, StringCompressor.CompressString(JsonConvert.SerializeObject(o, Formatting.Indented))) { } 


    public new A Content 
    { 
     get 
     { 
      return JsonConvert.DeserializeObject<A>(this.getContentAsString()); 
     }      
    } 


    new public string getContentAsString() 
    { 
     return StringCompressor.DecompressString(base.getContentAsString()); 
    } 
} 

(本類包括USOPackage()!)

和第二類:

public class LoginResponsePackage : JsonPackage<LoginResponse> 
{ 

    public LoginResponsePackage(LoginResult result) : base(PackageHeader.USO_AUTH_LOGIN_RESPONSE, new LoginResponse(result)) { } 


    public class LoginResponse 
    { 
     public LoginResult Result; 
     public LoginResponse(LoginResult r) 
     { 
      this.Result = r; 
     } 
    } 

    public enum LoginResult 
    { 
     OK, 
     FailedPassword, 
     FailedUsername, 
     FailedProtocolVersion 
    } 
} 

現在我想將「USOPackage」轉換爲「LoginResponsePackage」以獲取正確類型的包的「內容」。

如果我那樣做:

JsonPackage<LoginResponsePackage.LoginResponse> responsePackage = (JsonPackage<LoginResponsePackage.LoginResponse>)usopackage; 

所以,如果我嘗試致電

responsePackage.Content 

得到「內容」它的工作原理,這意味着我得到一個LoginResponse但是當我轉換類像那

LoginResponsePackage responsePackage = (LoginResponsePackage)usopackage; 

我無法訪問LoginReponse。它只是給我訪問,例如:BeginInvoke(),方法,目標,克隆() 我不知道這是從哪裏來的..

所以我的問題是我必須改變我的代碼被ABLT通過訪問「LoginResponsePackage.Content」

+0

*的BeginInvoke *,*方法*,*目標*等來自*代表*類。 *內容*必須返回一個委託... – IllidanS4

+0

@ IllidanS4我不知道如何意識到/你的意思是返回一個委託? –

+0

查看我的答案,* Content *的類型不是嵌套類型* LoginResponse *。 * LoginResponse *必須是課外的其他內容。 – IllidanS4

回答

2

的問題是在這行代碼直接澆鑄包,所以我得到一個「LoginResponse」:

public class LoginResponsePackage : JsonPackage<LoginResponse> 

在該上下文中的類型LoginResponse不意思是你在LoginResponsePackage中定義的嵌套類,它指的是類外的某種類型,我猜是委託fr om你對那裏的方法的描述。您尚未進入類範圍,因此您必須通過在類之外使用的名稱引用嵌套類型:LoginResponsePackage.LoginResponse
固定線:

public class LoginResponsePackage : JsonPackage<LoginResponsePackage.LoginResponse> 
+0

非常感謝!我真的應該避免使用類似的名字。 –

+0

現在我得到一個InvalidCastException,有什麼想法爲什麼? –

+0

我的文章的最後一行產生異常。 –