I have an abstract class called Foo, which is generic.
And there's a class called Bar, which is also generic, but needs T to be derived from Foo. But I can't do that without specifying a generic type for Foo, which I don't want to do - I want any class derived from Foo to be eligible.
abstract class Foo<T> { }
class Bar<T> where T : Foo { }
// This gives me CS0305 - Using the generic type Foo<T> requires 1 type argument.
I'm sure there's some sort of super obvious solution I'm missing.
CodePudding user response:
You have two options:
Create non-generic class
Fooand makeFoo<T>implement it (just likeIEnumerable<T>implementsIEnumerable)Make
Baruse two generics instead of oneclass Bar<T1,T2> where T1: Foo<T2>
CodePudding user response:
Assuming Question is meant to be Foo<> you could use:
class Bar<T, T2> where T : Foo<T2> { }
CodePudding user response:
You can do this by creating a class that is not generic like the following
public abstract class Foo { }
public abstract class Foo<T> : Foo { }
And now you can use your constrain with Foo
public class Bar<T> where T : Foo { }
And this will be required to T be a type of Foo and as long as you derive generic Foo<> from non-generic Foo your T must be Foo<T>
Example of usage:
public abstract class Foo { }
public abstract class Foo<T> : Foo { }
public abstract class Boo : Foo<string> { }
public class Bar<T> where T : Foo { }
public class BarTest : Bar<Boo> { }
