Checked vs Unchecked


Diễn đàn chia sẻ kiến thức, kinh nghiệm về IT và cuộc sống!
 
Trang ChínhGalleryTìm kiếmLatest imagesĐăng kýĐăng Nhập
Top posters
Sakura (1124)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
hotboy (705)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
Già Làng (373)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
con_ca_nho90 (289)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
that_true (154)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
theanhkkt (143)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
phamay (137)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
lovelonelyman (134)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
o0ovioletstaro0o (128)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
stevenhung (122)
Checked vs Unchecked Vote_lcapChecked vs Unchecked Voting_barChecked vs Unchecked Vote_rcap 
Âm - Dương lịch
Clock
Logo
11TH02 Pro!
Liên kết
Tin tức 60s
Tin công nghệ
Thời sự 24h
Game Moblie

Share
 

 Checked vs Unchecked

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Sakura

Checked vs Unchecked Stars7
Sakura

Thú CƯng : Checked vs Unchecked I-hate-Cats-icon
Nam Scorpio

Số bài viết : 1124
Điểm : 1688
Được cảm ơn : 35
Ngày sinh : 03/11/1990
Tham gia ngày : 16/03/2010
Tuổi : 34
Đến từ : Bình Dương
Ngề nghiệp : IT Student

Checked vs Unchecked Empty
Bài gửiTiêu đề: Checked vs Unchecked   Checked vs Unchecked I_icon_minitime8/10/2010, 09:36

Khi ta xử lý trên các KDL như int, byte, thì mặc định .NET không hỗ trợ việc kiểm tra tràn số.
Ví dụ kiểu int chứa khoảng hơn 2 tỷ. nhưng khi ta tính toán ra, mà nó vượt quá con số này (4 tỷ chẳng hạn) thì điều gì xảy ra? --> tràn số (chứ ko báo lỗi).

Vậy làm sao để bắt .NET kiểm tra dùm mình, đó là dùng cơ chế checked, khi 1 đoạn mã nằm trong khối checked này, thì các kết quả tính toán của nó sẽ được kiểm tra hợp lệ trong vùng chứa cho phép. Nếu có việc tràn số (overflow) xảy ra thì tự động .NET sẽ báo (phát, quăng, ném gì đó) ra cho chúng ta 1 ngoại lệ. Và để chương trình của chúng ta ko bị “đơ” thì phải dùng try…catch để “túm” lấy nó.
Ví dụ:
Khi ta không dùng checked để kiểm tra phép toán này:
Code:
using System;

class MainClass
{
    public static void Main()
    {
        //int: -2,147,483,648 den 2,147,483,647
        int a = int.MaxValue;
        int b = int.MaxValue;

        int c = a + b;
        Console.WriteLine("a + b = " + c);
        Console.ReadLine();
    }
}
Nó ra -2 --> sai
Giờ ta thử dùng checked để kiểm tra xem:
Code:
using System;

class MainClass
{
    public static void Main()
    {
        //int: -2,147,483,648 den 2,147,483,647
        int a = int.MaxValue;
        int b = int.MaxValue;
        int c;
        checked
        {
            c = a + b;
        }
        Console.WriteLine("a + b = " + c);
        Console.ReadLine();
    }
}

Hoặc có thể dùng:
Code:
using System;

class MainClass
{
    public static void Main()
    {
        //int: -2,147,483,648 den 2,147,483,647
        int a = int.MaxValue;
        int b = int.MaxValue;
        int c;
        c = checked((a + b));
        Console.WriteLine("a + b = " + c);
        Console.ReadLine();
    }
}

Trình biên dịch ném ra 1 ngoại lệ, chương trình của chúng ta dừng, báo lỗi như sau:
Code:
Arithmetic operation resulted in an overflow.
Bây giờ ta dùng try..catch để bắt lấy ngoại lệ này:
Code:
using System;

class MainClass
{
    public static void Main()
    {
        //int: -2,147,483,648 den 2,147,483,647
        int a = int.MaxValue;
        int b = int.MaxValue;
        int c = 0;

        try
        {
            c = checked((a + b));
        }
        catch (OverflowException e)
        {
            Console.WriteLine("Co Loi: " + e.Message);
        }
        finally
        {
            Console.WriteLine("Ket Thuc!");
        }
        Console.WriteLine("a + b = " + c);
        Console.ReadLine();
    }
}

Vẫn chạy và báo:
Code:
Co Loi: Arithmetic operation resulted in an overflow.
Ket Thuc!
a + b = 0;
Tuy nhiên, nếu ta không muốn làm việc kiểm tra tràn số này cũng được thui, mặc định, .NET đã làm việc này, tuy nhiên, ta cũng có thể dùng từ khóa unchecked để bỏ qua việc kiểm tra, khi đó, khỏi cần try..catch lỗi này làm gì.
Code:
using System;

class MainClass
{
    public static void Main()
    {
        //int: -2,147,483,648 den 2,147,483,647
        int a = int.MaxValue;
        int b = int.MaxValue;
        int c;

        c = unchecked(a + b);

        Console.WriteLine("a + b = " + c);
        Console.ReadLine();
    }
}
Và chúng ta lại quay lại kết quả ban đầu nhận đc (-2).

Chút kiến thức sơ xài về phần này, các bạn có thể tham khảo và bổ sung thêm!


Về Đầu Trang Go down
phamay

Member Năng Động


Member Năng Động
phamay

Thú CƯng : Checked vs Unchecked Pig-icon
Nam Libra

Số bài viết : 137
Điểm : 222
Được cảm ơn : 5
Ngày sinh : 20/10/1990
Tham gia ngày : 21/03/2010
Tuổi : 34
Đến từ : Đăk Lăk
Ngề nghiệp : Sờ tu đen
Chăm ngôn : IT

Checked vs Unchecked Empty
Bài gửiTiêu đề: Re: Checked vs Unchecked   Checked vs Unchecked I_icon_minitime8/10/2010, 11:44

sao thay giong giong java the nhi ? Nhu vay neu ko dung try catch de bat loi thi trong khi chay chuong trinh se xuat ra thong bao loi phai khong ?
Về Đầu Trang Go down
Sakura

Checked vs Unchecked Stars7
Sakura

Thú CƯng : Checked vs Unchecked I-hate-Cats-icon
Nam Scorpio

Số bài viết : 1124
Điểm : 1688
Được cảm ơn : 35
Ngày sinh : 03/11/1990
Tham gia ngày : 16/03/2010
Tuổi : 34
Đến từ : Bình Dương
Ngề nghiệp : IT Student

Checked vs Unchecked Empty
Bài gửiTiêu đề: Re: Checked vs Unchecked   Checked vs Unchecked I_icon_minitime8/10/2010, 16:28

phamay đã viết:
sao thay giong giong java the nhi ? Nhu vay neu ko dung try catch de bat loi thi trong khi chay chuong trinh se xuat ra thong bao loi phai khong ?

Đúng vậy! Khi ta chấp nhận checked thì phải có try...catch để túm nó. nếu ko thì đừng nên dùng, vì dùng vào càng mang họa hơn là mang lợi đó!
Về Đầu Trang Go down
bubupro.gdty

Member Năng Động


Member Năng Động
bubupro.gdty

Thú CƯng : Checked vs Unchecked Turtle-icon
Nữ Aries

Số bài viết : 118
Điểm : 123
Được cảm ơn : 0
Ngày sinh : 01/04/1990
Tham gia ngày : 02/04/2010
Tuổi : 34
Đến từ : Gia Lai
Ngề nghiệp : student
Chăm ngôn : to be or not to be

Checked vs Unchecked Empty
Bài gửiTiêu đề: Re: Checked vs Unchecked   Checked vs Unchecked I_icon_minitime8/10/2010, 21:33

thank's ku Hoàng nhìu nha Very Happy
Về Đầu Trang Go down
lovelonelyman

Member Năng Động


Member Năng Động
lovelonelyman

Nam Cancer

Số bài viết : 134
Điểm : 180
Được cảm ơn : 9
Ngày sinh : 15/07/1990
Tham gia ngày : 30/04/2010
Tuổi : 34
Đến từ : Thai Binh

Checked vs Unchecked Empty
Bài gửiTiêu đề: Re: Checked vs Unchecked   Checked vs Unchecked I_icon_minitime9/10/2010, 07:38

Thanks H nhìu nhe, cái này hay đó. phải nghien cứu thêm thì mới hỉu hết dc
Về Đầu Trang Go down
Sponsored content




Checked vs Unchecked Empty
Bài gửiTiêu đề: Re: Checked vs Unchecked   Checked vs Unchecked I_icon_minitime

Về Đầu Trang Go down
 

Checked vs Unchecked

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
IT World! :: HỌC TẬP :: HỌC KỲ V :: Nhập môn .Net-