C#中is,as,using关键字的使用说明
程序员文章站
2022-04-03 15:51:53
一、问题描述在c#中is,as,using关键字具有其特点及使用场景,其中is关键字用于检查该对象是否与给定类型兼容,as关键字用于将对象转换为指定类型,using关键字除了用于引入命名空间之外,还具...
一、问题描述
在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关键字的使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: 明朝的文官想被册封为公侯的话,该怎么做?