铸造泛型类? - >令人困惑的结果

时间:2016-11-24 20:04:50

标签: c#

Bofore我想问一下我的问题,请阅读下面的课程:

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;

因此,如果我尝试获取“内容”,则可以通过调用

获得LoginResponse
responsePackage.Content

但当我转换类

LoginResponsePackage responsePackage = (LoginResponsePackage)usopackage;

我无法访问LoginReponse。它只是让我访问例如:BeginInvoke(),Method,Target,Clone() 我不知道它来自哪里..

所以我的问题是我需要在我的代码中更改以直接转换包,以便通过访问“LoginResponsePackage.Content”获得“LoginResponse”

1 个答案:

答案 0 :(得分:2)

问题在于这行代码:

public class LoginResponsePackage : JsonPackage<LoginResponse>

此上下文中的LoginResponse类型并不代表您在LoginResponsePackage中定义的嵌套类,它指的是类外的某种类型,我想是您的代表那里的方法的描述。您还不在类范围内,因此您必须通过在类外使用的名称来引用嵌套类型:LoginResponsePackage.LoginResponse
固定线路:

public class LoginResponsePackage : JsonPackage<LoginResponsePackage.LoginResponse>