C# 之 using & lock & checked & unchecked语句

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

发布了475 篇原创文章 · 获赞 682 · 访问量 52万+

猜你喜欢

转载自blog.csdn.net/Czhenya/article/details/104791572