Middle
Lehet-e korlátozni azokat a típusokat, amelyeket a felhasználó át fog adni egy sablonon keresztül C#-ban?
sobes.tech MI
Válasz az MI-től
Igen, általános típuskorlátozások (generic constraints) használatával.
public class MyGenericClass<T> where T : IMyInterface // T-nek meg kell valósítania az IMyInterface-t
{
// ...
}
public class AnotherGenericClass<T> where T : class // T-nek referencia típusnak kell lennie
{
// ...
}
public class YetAnotherGenericClass<T> where T : struct // T-nek érték típusnak kell lennie
{
// ...
}
public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Kombinált korlátozások
{
// ...
}
Korlátozások típusai:
where T : struct: A típus érték típusnak kell lennie (nem nullable).where T : class: A típus referencia típusnak kell lennie.where T : new(): A típusnak nyilvános paraméter nélküli konstruktorral kell rendelkeznie. Ez a korlátozás nem használható egyszerrestructésclass-szal.where T : BaseClass: A típus örökli aBaseClass-t vagy maga aBaseClass.where T : IInterface: A típus meg kell valósítsa azIInterfaceinterfészt.where T : U: A típusnak vagyU-nak kell lennie, vagy örökölnie kell tőle, aholUegy másik típusparaméter.
Több korlátozás is összekapcsolható vesszővel elválasztva. A bázisszint vagy interfész korlátozásokat elsőként kell megadni.