Sobes.tech
Middle

Оё имкон дорад, ки намудҳоро, ки корбар тавассути шаблон дар C# мегузаронад, маҳдуд кард?

sobes.tech AI

Ҷавоб аз AI

ҳа, умумӣ навъҳои маҳдудиятҳоро (generic constraints) истифода бурда.

public class MyGenericClass<T> where T : IMyInterface // T бояд IMyInterface-ро иҷро кунад
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T бояд навъи ишораӣ бошад
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T бояд навъи арзишӣ бошад
{
    // ...
}

public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Маҳдудиятҳои омехта
{
    // ...
}

Навъҳои маҳдудият:

  • where T : struct: Навъ бояд навъи арзишӣ (на nullable) бошад.
  • where T : class: Навъ бояд навъи ишораӣ бошад.
  • where T : new(): Навъ бояд конструктори умумии публӣ дошта бошад. Ин маҳдудият наметавонад ҳамзамон бо struct ва class истифода шавад.
  • where T : BaseClass: Навъ бояд аз BaseClass мерос гирад ё худ BaseClass бошад.
  • where T : IInterface: Навъ бояд интерфейси IInterface-ро иҷро кунад.
  • where T : U: Навъ T бояд ё U бошад ё аз он мерос гирад, ки дар он U дигар параметри навъ мебошад.

Мумкин аст чанд маҳдудиятро бо ҳам дар як ҷумлаи ягонаи ҷудошудаи бо ҳарфҳои вом истифода бурд. Маҳдудиятҳо дар асосӣ ё интерфейс бояд аввал нишон дода шаванд.