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 ინტერფეისს და ჰქონდეს პარამეტრის გარეშე კონსტრუქტორი.