Sobes.tech
Middle

არის განსხვავება catch ბლოკების დაწერის წესში?

sobes.tech AI

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

დიახ, არსებობს. catch ბლოკები სერიულიად მუშავდება. უფრო სპეციფიკური გამონაკლისები უნდა იყოს უფრო ზოგიერთის წინ.

try
{
    // კოდი, რომელიც შეიძლება გამოიწვიოს გამონაკლისი
}
// უფრო სპეციფიკური გამონაკლისი
catch (System.FormatException ex)
{
    // ფორმატის შეცდომის მართვა
}
// ნაკლებად სპეციფიკური გამონაკლისი
catch (System.Exception ex)
{
    // ყველა სხვა გამონაკლისის მართვა
}

თუ უფრო ზოგადი გამონაკლისი პირველი დააყენეთ, მაშინ უფრო სპეციფიკური catch ბლოკი არასოდეს იქნება მისაღწევი იმ გამონაკლისებისთვის, რომლებიც მას მემკვიდრეობით იღებენ. მაგალითად, FormatException მემკვიდრეობს Exception-ს. თუ catch (Exception ex) პირველი იქნება, ის დაიჭერს და FormatException-საც.

არასწორი სია:

try
{
    // კოდი, რომელიც შეიძლება გამოიწვიოს გამონაკლისი
}
// საერთო გამონაკლისი
catch (System.Exception ex)
{
    // ყველა გამონაკლისის მართვა, მათ შორის `FormatException`
}
// ეს ბლოკი არასოდეს იქნება მისაღწევი `FormatException`-ისთვის,
// რადგან ის უკვე დაიჭირეს წინამორბედმა ბლოკმა
catch (System.FormatException ex)
{
    // ეს კოდი ამ შემთხვევაში მიუწვდომელია
}

C# კომპილატორი გამოიტანს გაფრთხილებას ან შეცდომას მიუწვდომელი catch ბლოკისთვის.