这篇文章给大家介绍is、as与using关键字如何在C#中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
一、问题描述
在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());
关于is、as与using关键字如何在C#中使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。