Sobes.tech
Middle

Kas on võimalik piirata tüüpe, mida kasutaja C#-i kaudu šabloni kaudu edastab?

sobes.tech AI

Vastus AI-lt

Jah, kasutades üldtüüpide piiranguid (generic constraints).

public class MyGenericClass<T> where T : IMyInterface // T peab rakendama IMyInterface
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T peab olema viidetüüp
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T peab olema väärtustüüp
{
    // ...
}

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

Piirangute tüübid:

  • where T : struct: Tüüp peab olema väärtustüüp (mitte nullable).
  • where T : class: Tüüp peab olema viidetüüp.
  • where T : new(): Tüüp peab omama avalikku parameetriteta konstruktorit. Seda piirangut ei saa kasutada koos struct ja class-iga.
  • where T : BaseClass: Tüüp peab pärima BaseClass-ist või olema ise BaseClass.
  • where T : IInterface: Tüüp peab rakendama IInterface liidest.
  • where T : U: Tüüp peab olema või pärima U, kus U on teine tüübiparameeter.

Võite kombineerida mitu piirangut, neid eraldades komaga. Põhja- või liidese piirangud peavad olema esimesed.