using System;
public class Test
{
class Base
{
}
class ClassA : Base
{
}
class ClassB : Base
{
}
class OtherBase
{
}
class ClassC : OtherBase
{
}
static void Foo<T>()
where T : Base
{
var type = typeof(T);
Console.WriteLine(type.Name);
}
static void Foo<T1, T2>()
where T1 : Base
where T2 : Base
{
Foo<T1>();
Foo<T2>();
}
public static void Main()
{
Foo<ClassA>();
Foo<ClassA, ClassB>();
// Foo<ClassC>(); // gdy odkomentujemy nie skompiluje się ze względu na generic constraint
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJY2xhc3MgQmFzZQoJewoJfQoJCgljbGFzcyBDbGFzc0EgOiBCYXNlCgl7Cgl9CgkKCWNsYXNzIENsYXNzQiA6IEJhc2UKCXsKCX0KCQoJY2xhc3MgT3RoZXJCYXNlCgl7Cgl9CgkKCWNsYXNzIENsYXNzQyA6IE90aGVyQmFzZQoJewoJfQoJCglzdGF0aWMgdm9pZCBGb288VD4oKQoJCXdoZXJlIFQgOiBCYXNlCgl7CgkJdmFyIHR5cGUgPSB0eXBlb2YoVCk7CgkJQ29uc29sZS5Xcml0ZUxpbmUodHlwZS5OYW1lKTsKCX0KCQoJc3RhdGljIHZvaWQgRm9vPFQxLCBUMj4oKQoJCXdoZXJlIFQxIDogQmFzZQoJCXdoZXJlIFQyIDogQmFzZQoJewoJCUZvbzxUMT4oKTsKCQlGb288VDI+KCk7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlGb288Q2xhc3NBPigpOwoJCUZvbzxDbGFzc0EsIENsYXNzQj4oKTsKCQkvLyBGb288Q2xhc3NDPigpOyAvLyBnZHkgb2Rrb21lbnR1amVteSBuaWUgc2tvbXBpbHVqZSBzacSZIHplIHd6Z2zEmWR1IG5hIGdlbmVyaWMgY29uc3RyYWludAoJfQp9