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
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With