Sobes.tech
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ó egyszerre struct és class-szal.
  • where T : BaseClass: A típus örökli a BaseClass-t vagy maga a BaseClass.
  • where T : IInterface: A típus meg kell valósítsa az IInterface interfészt.
  • where T : U: A típusnak vagy U-nak kell lennie, vagy örökölnie kell tőle, ahol U egy 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.