Junior — Middle
რა განსხვავებაა რეფერენციული ტიპებისა და მნიშვნელობით ტიპებს შორის C#-ში და რა არის მათი ძირითადი განსხვავებები გამოყენებაში?
sobes.tech AI
პასუხი AI-სგან
C#-ში ტიპები იყოფა მნიშვნელობის ტიპებად (value types) და მითითების ტიპებად (reference types).
მნიშვნელობის ტიპები პირდაპირ ინახავენ მონაცემებს. მაგალითები: int, double, struct. როდესაც მიენიჭება ან გადაეცემა მეთოდს, თავად მნიშვნელობა იწერება, ანუ ქმნიან დამოუკიდებელ ნუსხას.
მითითების ტიპები ინახავენ ბმულს ობიექტზე მეხსიერებაში (heap). მაგალითები: class, string, მასივები. როდესაც მიენიჭება, იწერება მხოლოდ ბმული, არა ობიექტი, ამიტომ რამდენიმე ცვლადი შეიძლება მიუთითებდეს ერთ ობიექტზე.
ძირითადი განსხვავებები:
- საწყობი: მნიშვნელობის ტიპები ჩვეულებრივ სტეკზეა, მითითების ტიპები — heap-ზე.
- ნუსხა: მნიშვნელობის ტიპები ნუსხით იწერება, მითითების ტიპები — ბმულით.
- ცვლილების დროს ქცევა: მნიშვნელობის ტიპის ცვლილება არ ზემოქმედებს სხვა ნუსხებზე, მითითების ტიპის ობიექტის ცვლილება აისახება ყველა ბმულზე.
მაგალითი:
int a = 5;
int b = a; // მნიშვნელობის ნუსხა
a = 10; // a დარჩება 5
class ადამიანი { public string სახელი; }
ადამიანი p1 = new ადამიანი { სახელი = "Иван" };
ადამიანი p2 = p1; // ბმულის ნუსხა
p2.სახელი = "Пётр"; // p1.სახელი ასევე შეიცვლება "Пётр"