一、问题描述
在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());
以上这篇C#中is,as,using关键字的使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。
您可能感兴趣的文章:C#中使用split分割字符串的几种方法小结C# Dockpanel入门基础必看篇c# base64转字符串实例c# Linq distinct不会调用Equals方法详解完美解决c# distinct不好用的问题C#调用7z实现文件的压缩与解压C# Split函数根据特定分隔符分割字符串的操作