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 sustructirclass.where T : BaseClass: Tipas turi būti paveldėjęs išBaseClassarba pats būtiBaseClass.where T : IInterface: Tipas turi įgyvendintiIInterfacesąsają.where T : U: TipasTturi būti arba paveldėti išU, kurUyra kitas tipų parametras.
Galima sujungti kelis apribojimus, juos atskiriant kableliu. Apribojimai pagrindiniam klasei ar sąsajai turi būti nurodyti pirmieji.