探討c#中的unchecked是什么意思,起什么作用?
更新時(shí)間:2013年06月05日 11:58:17 作者:
本篇文章是對(duì)c#中的unchecked進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
Checked與Unchecked
對(duì)于因?yàn)檎麛?shù)類型參與算術(shù)操作和類型轉(zhuǎn)換時(shí)產(chǎn)生的“溢出異?!薄猄ystem.OverflowException,在某些算法來講不算真正的“異?!?,相反這種溢出常常為程序所用。C#通過引入checked和unchecked關(guān)鍵字來控制這種特殊情況的需求。它們都可以加于一個(gè)語句塊前(如:checked{……}),或者一個(gè)算術(shù)表達(dá)式前(如:unchecked(x+y)),其中加checked標(biāo)志的語句或表達(dá)式如果發(fā)生算術(shù)溢出,則拋出System.OverflowException類型的異常,而加unchecked標(biāo)志的語句發(fā)生算術(shù)溢出時(shí),則不拋出異常。下面是一個(gè)示例:
using System;
class Test{
static void Main() {
int num1=100000,num2=100000,
result=0;
checked{ try { result= num1 * num2;}
catch(System.Overflo2wException e){ Console.WriteLine(e); }
finally{ Console.WriteLine(result);}
}
unchecked{ try { result= num1 * num2;}
catch(System.OverflowException (e){ Console.WriteLine(e);}
finally{ Console.WriteLine(result);}
}
}
}
程序輸出:
System.OverflowException: Arithmetic operation resulted in an overflow.
at Test.Main()
0
1410065408
可以看到同樣的算術(shù)操作,用checked拋出了溢出異常,而unchecked只是將溢出的位丟棄而得到剩下的32位組成的十進(jìn)制整數(shù)值。值得指出的是可以用“/checked”編譯器選項(xiàng)指定整個(gè)文件的代碼為checked語義,如果沒有指定則默認(rèn)為unchecked。如果同時(shí)在程序代碼中指定checked或unchecked標(biāo)志,又有了checked編譯器選項(xiàng),則除了標(biāo)志為unchecked的代碼外,其余的都有checked語義。
對(duì)于因?yàn)檎麛?shù)類型參與算術(shù)操作和類型轉(zhuǎn)換時(shí)產(chǎn)生的“溢出異?!薄猄ystem.OverflowException,在某些算法來講不算真正的“異?!?,相反這種溢出常常為程序所用。C#通過引入checked和unchecked關(guān)鍵字來控制這種特殊情況的需求。它們都可以加于一個(gè)語句塊前(如:checked{……}),或者一個(gè)算術(shù)表達(dá)式前(如:unchecked(x+y)),其中加checked標(biāo)志的語句或表達(dá)式如果發(fā)生算術(shù)溢出,則拋出System.OverflowException類型的異常,而加unchecked標(biāo)志的語句發(fā)生算術(shù)溢出時(shí),則不拋出異常。下面是一個(gè)示例:
復(fù)制代碼 代碼如下:
using System;
class Test{
static void Main() {
int num1=100000,num2=100000,
result=0;
checked{ try { result= num1 * num2;}
catch(System.Overflo2wException e){ Console.WriteLine(e); }
finally{ Console.WriteLine(result);}
}
unchecked{ try { result= num1 * num2;}
catch(System.OverflowException (e){ Console.WriteLine(e);}
finally{ Console.WriteLine(result);}
}
}
}
程序輸出:
復(fù)制代碼 代碼如下:
System.OverflowException: Arithmetic operation resulted in an overflow.
at Test.Main()
0
1410065408
可以看到同樣的算術(shù)操作,用checked拋出了溢出異常,而unchecked只是將溢出的位丟棄而得到剩下的32位組成的十進(jìn)制整數(shù)值。值得指出的是可以用“/checked”編譯器選項(xiàng)指定整個(gè)文件的代碼為checked語義,如果沒有指定則默認(rèn)為unchecked。如果同時(shí)在程序代碼中指定checked或unchecked標(biāo)志,又有了checked編譯器選項(xiàng),則除了標(biāo)志為unchecked的代碼外,其余的都有checked語義。
相關(guān)文章
C#實(shí)現(xiàn)獲取枚舉中元素個(gè)數(shù)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)獲取枚舉中元素個(gè)數(shù)的方法,是深入理解C#程序設(shè)計(jì)所需要掌握的基本技巧,需要的朋友可以參考下2014-08-08
利用C#實(shí)現(xiàn)Window系統(tǒng)桌面鎖定效果
在實(shí)際開發(fā)中,我們有時(shí)需要實(shí)現(xiàn)類似"屏幕鎖定"的效果,C# 作為一門強(qiáng)大的桌面應(yīng)用開發(fā)語言,結(jié)合 Windows API 可以輕松實(shí)現(xiàn)這一功能,所以本文將通過調(diào)用 SetForegroundWindow 和 GetForegroundWindow 兩個(gè)核心方法,實(shí)現(xiàn)一個(gè)簡(jiǎn)易但實(shí)用的屏幕鎖定程序,需要的朋友可以參考下2025-05-05
C# 7.0之ref locals and returns(局部變量和引用返回)
這篇文章主要介紹了C# 7.0之ref locals and returns,即局部變量和引用返回,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Visual C#類的定義及實(shí)現(xiàn)方法實(shí)例解析
這篇文章主要介紹了Visual C#類的定義及實(shí)現(xiàn)方法實(shí)例解析,對(duì)于新手來說有不錯(cuò)的借鑒學(xué)習(xí)價(jià)值,需要的朋友可以參考下2014-07-07
C# 操作PostgreSQL 數(shù)據(jù)庫的示例代碼
本篇文章主要介紹了C# 操作PostgreSQL 數(shù)據(jù)庫的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11

