Sobes.tech
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.სახელი ასევე შეიცვლება "Пётр"