Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot implicitly convert derived type to its base generic type

Tags:

c#

.net

generics

I have the following classes and interfaces:

public interface IThing {     string Name { get; } }  public class Thing : IThing {     public string Name { get; set; } }  public abstract class ThingConsumer<T> where T : IThing {     public string Name { get; set; } } 

Now, I have a factory that will return objects derived from ThingConsumer like:

public class MyThingConsumer : ThingConsumer<Thing> { } 

My factory currently looks like this:

public static class ThingConsumerFactory<T> where T : IThing {     public static ThingConsumer<T> GetThingConsumer(){         if (typeof(T) == typeof(Thing))         {             return new MyThingConsumer();         }         else         {             return null;         }     } } 

I'm getting tripped up with this error: Error 1 Cannot implicitly convert type 'ConsoleApplication1.MyThingConsumer' to 'ConsoleApplication1.ThingConsumer<T>'

Anyone know how to accomplish what I'm attempting here?

Thanks!

Chris

like image 768
Mister Epic Avatar asked Sep 07 '12 19:09

Mister Epic


1 Answers

If you make ThingConsumer<T> an interface rather than an abstract class, then your code will work as is.

public interface IThingConsumer<T> where T : IThing {     string Name { get; set; } } 

Edit

One more change needed. In ThingConsumerFactory, cast back to the return type IThingConsumer<T>:

return (IThingConsumer<T>)new MyThingConsumer(); 
like image 152
McGarnagle Avatar answered Sep 23 '22 08:09

McGarnagle