Sobes.tech
Middle

Ar galima apriboti tipus, kuriuos naudotojas perduos per šabloną C#?

sobes.tech AI

Atsakymas iš AI

Taip, naudojant bendrųjų tipų apribojimus (generic constraints).

public class MyGenericClass<T> where T : IMyInterface // T turi įgyvendinti IMyInterface
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T turi būti nuorodos tipas
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T turi būti reikšmės tipas
{
    // ...
}

public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Sujungti apribojimai
{
    // ...
}

Apribojimų tipai:

  • where T : struct: Tipas turi būti reikšmės tipas (ne nullable).
  • where T : class: Tipas turi būti nuorodos tipas.
  • where T : new(): Tipas turi turėti viešą beparametrinį konstruktorių. Šis apribojimas negali būti naudojamas kartu su struct ir class.
  • where T : BaseClass: Tipas turi būti paveldėjęs iš BaseClass arba pats būti BaseClass.
  • where T : IInterface: Tipas turi įgyvendinti IInterface sąsają.
  • where T : U: Tipas T turi būti arba paveldėti iš U, kur U yra kitas tipų parametras.

Galima sujungti kelis apribojimus, juos atskiriant kableliu. Apribojimai pagrindiniam klasei ar sąsajai turi būti nurodyti pirmieji.