Cast of a Generic Type in .NET -
why following cast not working ?
public void add<t>() t : myinterface { var newobject = new factory<t>() factory<myinterface>; ... } public class factory<t> t : myinterface { ... }
newobjects remains null.
probably because factory<t>
not subtype of factory<myinterface>
, , cast fails.
factory<t>
invariant (assuming it's class), means factory<string>
not derive factory<object>
, though string
derives object
.
what you're looking covariance. unfortunately, classes cannot variant in c#, interfaces can, iiiif generic type parameter t
used output (e.g., method's return type) , never input (e.g., method parameters).
if factory uses t
output, can define covariant inteface such as:
public interface ifactory<out t> {} public class factory<t> : ifactory<t> {}
now can cast ifactory<t>
t:myinterface
ifactory<myinterface>
Comments
Post a Comment