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

举报
陈言必行 发表于 2021/08/13 23:30:29 2021/08/13
【摘要】 C# 之 using & lock & checked & unchecked 语句 一.using语句 三种常见的用法: 1. 引入命名空间 2.重命名 using System; //引入命名空间 using myMatht = System.Math; //重命名 namespace CSharpDemo { class Prog...

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)); } }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.using语句获取一个或多个资源,执行一个语句,然后释放该资源

using System.IO;

namespace CSharpDemo
{ class Program { static void Main(string[] args) { using (TextWriter w = File.CreateText("test.txt"))//获取资源 { w.WriteLine("写入数据"); } } }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

二.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); } } }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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); } } }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

运行会抛异常
校验

	class Program { static void Main(string[] args) { int i = int.MaxValue; Console.WriteLine(i + 1); unchecked { Console.WriteLine(i + 1); } } }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

不校验或者是unchecked的输出结果:
测试

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/104791572

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。