Sobes.tech
Middle

C# da shablon orqali foydalanuvchi o'tkazadigan turlarni cheklash mumkinmi?

sobes.tech AI

AIdan javob

Ha, umumiy turlar cheklovlari (generic constraints) dan foydalanib.

public class MyGenericClass<T> where T : IMyInterface // T, IMyInterface ni amalga oshirishi kerak
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T, referens tur bo'lishi kerak
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T, qiymat turi bo'lishi kerak
{
    // ...
}

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

Cheklov turlari:

  • where T : struct: Turi qiymat turi bo'lishi kerak (null bo'lmasligi kerak).
  • where T : class: Turi referens tur bo'lishi kerak.
  • where T : new(): T, jamoat bo'sh konstruktoriga ega bo'lishi kerak. Bu cheklov struct va class bilan birga ishlatilmaydi.
  • where T : BaseClass: Turi BaseClass dan meros olishi yoki BaseClass bo'lishi kerak.
  • where T : IInterface: Turi IInterface interfeysini amalga oshirishi kerak.
  • where T : U: T, U bo'lishi yoki undan meros olishi kerak, bu yerda U boshqa tur parametridir.

Bir nechta cheklovlarni vergul bilan ajratib birlashtirish mumkin. Asosiy sinf yoki interfeys cheklovlari birinchi bo'lishi kerak.