Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
593 views
in Technique[技术] by (71.8m points)

c# - Casting to Generic base class failing

I am failing to see why my attempt to cast to a generic base class is not working.

The basic structure of the code is as follows.

interface ICmd
{
}

class Context
{
}

class Cmd<TContext> : ICmd
    where TContext : Context
{
}

class MyContext : Context
{
}

class MyCmd : Cmd<MyContext>
{
}

So now I have an instance of ICmd and want to cast it to Cmd as follows

var base = cmd as Cmd<Context>

base is always null after this line is executed.

changing cast to be specific for the context only and it works.

var base = cmd as Cmd<MyContext>       -- this works ???

Hope I have provided enough information, is this a covariancecontravariance issue?

Thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You may want to use co- and contravariance.

The problem is that Cmd<Context> is not the base class of Cmd<MyContext>.

See this recent question for a more detailed answer: C# Generics Inheritance Problem


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...