Sobes.tech
Junior — Middle

არსებობს თუ არა შეზღუდვები საკუთარი უნივერსალური შაბლონის (გენერიკი) განსაზღვრისას?

sobes.tech AI

პასუხი AI-სგან

C# დელიკტში თქვენი საკუთარი უნივერსალური შაბლონების (generics) განსაზღვრისას არსებობს გარკვეული შეზღუდვები:

  • პარამეტრის ტიპები უნდა იყოს მითითებები, მნიშვნელობის ტიპები ან ჰქონდეთ გარკვეული შეზღუდვები (constraints), მაგალითად, მემკვიდრეობა გარკვეული კლასიდან, ინტერფეისის განხორციელება, პარამეტრის გარეშე კონსტრუქტორის არსებობა.
  • თუ საჭიროა სპეციფიკური ფუნქციონალობა, primitives ტიპებს პირდაპირ გამოყენება შეუძლებელია შეზღუდვების გარეშე.
  • პარამეტრის ტიპის ინიციალიზაცია შეუძლებელია new() შეზღუდვის გარეშე, რადგან კომპილატორი არ იცის როგორ უნდა დააწყოს.
  • typeof(T) ან is T ოპერატორების გამოყენება შეუძლებელია შეზღუდვების გარეშე.

შეზღუდვის მაგალითი:

public class Repository<T> where T : IEntity, new()
{
    public T CreateNew() => new T();
}

აქ T უნდა განხორციელებდეს IEntity ინტერფეისს და ჰქონდეს პარამეტრის გარეშე კონსტრუქტორი.