C# 之 using & lock & checked & unchecked 語句
一.using語句
三種常見的用法:
1. 引入命名空間
2.重命名
using System; //引入命名空間
using myMatht = System.Math; //重命名
namespace CSharpDemo
{
class Program
{
static void Main(string[] args)
{
int a = -1;
//使用
Console.WriteLine(myMatht.Abs(a));
}
}
}
3.using語句獲取一個或多個資源,執行一個語句,然後釋放該資源
using System.IO;
namespace CSharpDemo
{
class Program
{
static void Main(string[] args)
{
using (TextWriter w = File.CreateText("test.txt"))//獲取資源
{
w.WriteLine("寫入數據");
}
}
}
}
二.lock語句
lock 關鍵字將語句塊標記爲臨界區,方法是獲取給定對象的互斥鎖,執行語句,然後釋放該鎖。
lock 語句獲取給定對象的互斥 lock,執行語句塊,然後釋放 lock。 持有 lock 時,持有 lock 的線程可以再次獲取並釋放 lock。 阻止任何其他線程獲取 lock 並等待釋放 lock。
lock 關鍵字可以用來確保代碼塊完成運行,而不會被其他線程中斷。這是通過在代碼塊運行期間爲給定對象獲取互斥鎖來實現的。
decimal Account;
void ChangeValue(decimal money)
{
lock (this)
{
if (Account > money)
{
Account += money;
Console.WriteLine("操作後賬戶餘額:" + Account);
}
}
}
PS:
1.lock語句中鎖定的必須是引用類型的對象,不能是值類型
2.爲了避免死鎖,lock的對象需要是private對象
三.checked語句和unchecked語句
checked 語句和unchecked 語句用於控制整型算術運算和轉換的溢出檢查上下文。
checked 語句使塊中的所有表達式都在一個選中的上下文中進行計算,而unchecked 語句使它們在一個未選中的上下文中進行計算,功能與checked和unchecked運算符相同。
class Program
{
static void Main(string[] args)
{
int i = int.MaxValue;
checked
{
Console.WriteLine(i + 1);
}
}
}
運行會拋異常
class Program
{
static void Main(string[] args)
{
int i = int.MaxValue;
Console.WriteLine(i + 1);
unchecked
{
Console.WriteLine(i + 1);
}
}
}
不校驗或者是unchecked的輸出結果: