Sobes.tech
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 cu struct și class.
  • where T : BaseClass: Tipul trebuie să moștenească de la BaseClass sau să fie BaseClass însuși.
  • where T : IInterface: Tipul trebuie să implementeze interfața IInterface.
  • where T : U: Tipul T trebuie să fie sau să moștenească de la U, unde U este 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.