Middle
Este posibil să limitezi tipurile pe care utilizatorul le va transmite printr-un șablon în C#?
sobes.tech AI
Răspuns de la AI
Da, utilizând restricții de tipuri generice (generic constraints).
public class MyGenericClass<T> where T : IMyInterface // T trebuie să implementeze IMyInterface
{
// ...
}
public class AnotherGenericClass<T> where T : class // T trebuie să fie un tip de referință
{
// ...
}
public class YetAnotherGenericClass<T> where T : struct // T trebuie să fie un tip de valoare
{
// ...
}
public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Restricții combinate
{
// ...
}
Tipuri de restricții:
where T : struct: Tipul trebuie să fie un tip de valoare (non-nullable).where T : class: Tipul trebuie să fie un tip de referință.where T : new(): Tipul trebuie să aibă un constructor public fără parametri. Această restricție nu poate fi utilizată simultan custructșiclass.where T : BaseClass: Tipul trebuie să moștenească de laBaseClasssau să fieBaseClassînsuși.where T : IInterface: Tipul trebuie să implementeze interfațaIInterface.where T : U: TipulTtrebuie să fie sau să moștenească de laU, undeUeste un alt parametru de tip.
Se pot combina mai multe restricții, separându-le prin virgulă. Restricțiile pentru clasa de bază sau interfață trebuie specificate primele.