Middle
რატომ შეიყვანეს ref და out საკვანძო სიტყვები C#-ში მიმთითებელი ტიპებისთვის?
sobes.tech AI
პასუხი AI-სგან
მიუხედავად იმისა, რომ მიმთითებელი ტიპები გადაეცემა მითითებით (გადაეცემა მითითების ასლი), ref ან out გამოყენებით შესაძლებელია გადაცემა მიუთითებელი თვითონ ობიექტის მითითებით.
ეს შეიძლება იყოს სასარგებლო შემდეგ შემთხვევებში:
- ობიექტის მაგალითის შეცვლა: საშუალებას აძლევს მეთოდს შეცვალოს, რომელ მაგალითზე მიუთითებს ცვლადი-პარამეტრი, ახალი მაგალითის მინიჭებით.
TryParseმეთოდების განხორციელება: მეთოდი აბრუნებსbool-ს, რომელიც მიუთითებს წარმატებაზე, და შედეგი იწერებაout-პარამეტრში.out-ის გარეშე, საჭიროა გამონაკლისის გადატანა წარუმატებლობის დროს (რაც ყოველთვის სასურველი არაა), ან ტუპლის დაბრუნება.- ეფექტიანობა (ძნელად, მაგრამ შესაძლებელია): ზოგიერთ ექსტრემალურ შემთხვევებში, თუ ობიექტი ძალიან დიდია და ხშირად უნდა შეიცვალოს მეთოდში, გადაცემა მითითებით (
ref) შეიძლება იყოს ცოტათი უფრო ეფექტიანი, ვიდრე ახალი ობიექტის დაბრუნება (თუმცა ეს იშვიათია).
მაგალითი ref-ის გამოყენებით მაგალითის შეცვლის:
public class MyClass
{
public int Value { get; set; }
}
public void ReplaceObject(ref MyClass obj)
{
obj = new MyClass { Value = 10 }; // შეცვლის ობიექტის მითითებას
}
// ... სხვა ადგილას
MyClass instance = new MyClass { Value = 5 };
ReplaceObject(ref instance);
// ახლა, instance მითითებულია ახალ ობიექტზე, რომლის Value = 10
მაგალითი out-ის გამოყენებით:
public bool TryParseInt(string s, out int result)
{
// პარსინგის ლოგიკა
if (int.TryParse(s, out result))
{
return true;
}
result = 0; // შეცვლის მნიშვნელობას წარუმატებლობის შემთხვევაში
return false;
}
// ... სხვა ადგილას
int parsedValue;
if (TryParseInt("123", out parsedValue))
{
// წარმატებული პარსინგი
}