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: ტიპი U უნდა იყოს ან მემკვიდრეობდეს მას, სადაც U სხვა ტიპის პარამეტრია.

შეგიძლიათ რამდენიმე შეზღუდვა ერთდროულად გამოიყენოთ მძიმით გამიჯნული. ბაზის კლასი ან ინტერფეისი შეზღუდვები პირველ ადგილზე უნდა იყოს მითითებული.