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的输出结果: