C#中is,as,using关键字的使用说明
作者:tongyuehong 时间:2023-07-01 22:54:42
一、问题描述
在C#中is,as,using关键字具有其特点及使用场景,其中is关键字用于检查该对象是否与给定类型兼容,as关键字用于将对象转换为指定类型,using关键字除了用于引入命名空间之外,还具有回收对象资源,如文件资源、网络资源和数据库资源等。
1、is:用于检查对象是否与给定类型兼容,如果兼容,则返回true,否则返回false,不会抛出异常。在进行类型转换之前,可以先用is判断对象是否与给定类型兼容,如果兼容再进行转换。
案例:
string str ="test";
object obj = str;
if(obj is string) {string str2 = (string)obj};
2、as:用于引用类型之间转换,直接进行转换,若转换成功,则返回转换后的对象,若转换失败返回null,不抛出异常。
案例:
string str ="test";
object obj = str;
string str2 = obj as tring;
if(str2 !=null) {转换成功}
3、using:引用命名空间,有效回收资源,using关键字可以回收多个对象的资源,关键字后面的小括号内创建的对象必须实现IDisposable接口,或者该类的基类已经实现了IDisposable接口。回收资源的时机是在using关键字下面的代码块执行完成之后自动调用接口方法Dispose()销毁对象。
案例:
using (Test test =new Test()) { 各种操作;}
calss Test :IDisposable {
public void Dispose() {回收操作;}
}
二、代码案例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace test1
{
public partial class Form9 : Form
{
public Form9()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//转为object
if (obj_rdb.Checked)
{
//使用using关键字,在代码块执行完成之后自动回收资源
//由于FileStream已经实现了IDisposable接口,可以直接使用
using (FileStream fileStream = new FileStream(@"d:\test.txt", System.IO.FileMode.Create))
{
object obj = fileStream as object; //直接使用as转换
if (obj != null)
{
MessageBox.Show("FileStream转换为object成功", "提示信息");
}
else
{
MessageBox.Show("FileStream转换为object失败", "错误信息");
}
}
}
else
{
using (FileStream fileStream = new FileStream(@"d:\test.txt", System.IO.FileMode.Create))
{
//直接强制转换
try
{
Stream stream = (Stream)fileStream;
MessageBox.Show("FileStream转换为Stream成功", "提示信息");
}catch(Exception ex)
{
MessageBox.Show(ex.Message, "错误信息");
}
}
}
}
}
}
三、显示结果
补充知识:c#Constructor构造函数注入
1、创建接口
public interface ITimeProvider
{
DateTime CurrentDate { get; }
string CurrentYear { get; }
}
2、继承接口,实现类
public class TimeProvider : ITimeProvider
{
public DateTime CurrentDate { get { return DateTime.Now; } }
public string CurrentYear { get { return DateTime.Now.Year.ToString(); } }
}
3、创建注入机制
public class Assembler
{
private static Dictionary<Type, Type> dictionary = new Dictionary<Type, Type>();
public Assembler()
{
dictionary.Add(typeof(ITimeProvider), typeof(TimeProvider));
}
public object Create(Type type)
{
if (type == null || !dictionary.ContainsKey(type)) throw new NullReferenceException();
Type targetType = dictionary[type];
return Activator.CreateInstance(targetType);
}
public T Create<T>()
{
return (T)Create(typeof(T));
}
}
4、客户端调用
public class Client
{
private ITimeProvider timeProvider;
public Client(ITimeProvider timeProvider)
{
this.timeProvider = timeProvider;
}
public string GetYear()
{
return timeProvider.CurrentYear .ToString();
}
public string GetDatetime()
{
return timeProvider.CurrentDate.ToString();
}
}
5、使用实现
ITimeProvider timeProvider = (new Assembler()).Create<ITimeProvider>();
Client clinet = new Client(timeProvider);
Console.WriteLine(clinet.GetYear());
Console.WriteLine(clinet.GetDatetime());
来源:https://blog.csdn.net/tongyuehong137/article/details/51395298
标签:C#,is,as,using
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Docker环境下Spring Boot应用内存飙升分析与解决场景分析
2023-04-28 05:00:24
![](https://img.aspxhome.com/file/2023/5/119795_0s.jpg)
android中图形图像处理之drawable用法分析
2023-01-13 07:45:03
执行java请求时导致在脚本执行结束时JVM无法退出
2023-11-25 05:57:13
Android编程使用pull方式解析xml格式文件的方法详解
2022-08-26 14:18:35
![](https://img.aspxhome.com/file/2023/5/93295_0s.png)
详解c# 线程同步
2023-11-23 08:54:48
![](https://img.aspxhome.com/file/2023/8/94628_0s.png)
Spring+SpringMVC+MyBatis深入学习及搭建(一)之MyBatis的基础知识
2021-09-27 15:12:59
![](https://img.aspxhome.com/file/2023/3/66503_0s.png)
Java 重命名 Excel 工作表并设置工作表标签颜色的示例代码
2023-02-22 15:35:34
![](https://img.aspxhome.com/file/2023/1/65211_0s.png)
关于javascript冒泡与默认事件的使用详解
2023-05-16 07:16:32
Android仿抖音列表效果
2022-03-01 16:36:50
![](https://img.aspxhome.com/file/2023/1/122091_0s.gif)
C#函数式编程中的惰性求值详解
2022-01-27 03:07:29
![](https://img.aspxhome.com/file/2023/8/102198_0s.png)
Java 1.0和Java 1.1 的IO类的比较
2023-10-07 10:48:39
![](https://img.aspxhome.com/file/2023/0/69350_0s.jpg)
Java中StringUtils与CollectionUtils和ObjectUtil概念讲解
2023-11-29 07:45:38
![](https://img.aspxhome.com/file/2023/4/59004_0s.png)
Android中ListView的几种常见的优化方法总结
2021-06-09 08:36:21
![](https://img.aspxhome.com/file/2023/9/116009_0s.png)
Bitmap海量数据快速查找去重代码示例
2021-12-01 12:21:07
Android实现状态栏(statusbar)渐变效果的示例
2023-09-19 19:13:43
![](https://img.aspxhome.com/file/2023/1/138981_0s.png)
Java持久化框架Hibernate与Mybatis优劣及选择详解
2023-12-03 19:46:14
springboot实现异步任务
2023-04-23 01:25:21
![](https://img.aspxhome.com/file/2023/0/64210_0s.jpg)
一文详解Java Netty中的Constant类
2023-03-03 17:17:55
![](https://img.aspxhome.com/file/2023/9/94369_0s.webp)
java单例模式学习示例
2022-03-29 19:03:41
Java中实现双数组Trie树实例
2023-03-19 15:12:38