Sobes.tech
Middle

Lze omezit typy, které uživatel bude předávat přes šablonu v C#?

sobes.tech AI

Odpověď od AI

Ano, použitím obecných omezení (generic constraints).

public class MyGenericClass<T> where T : IMyInterface // T musí implementovat IMyInterface
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T musí být referenční typ
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T musí být hodnotový typ
{
    // ...
}

public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Kombinovaná omezení
{
    // ...
}

Typy omezení:

  • where T : struct: Typ musí být hodnotový typ (ne nullable).
  • where T : class: Typ musí být referenční typ.
  • where T : new(): Typ musí mít veřejný bezparametrický konstruktor. Toto omezení nelze použít současně s struct a class.
  • where T : BaseClass: Typ musí dědit od BaseClass nebo být BaseClass sám.
  • where T : IInterface: Typ musí implementovat rozhraní IInterface.
  • where T : U: Typ T musí být nebo dědit od U, kde U je jiný parametr typu.

Lze kombinovat více omezení oddělených čárkou. Omezení na základní třídu nebo rozhraní musí být uvedena jako první.