欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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#中is,as,using关键字的使用说明

C#中is,as,using关键字的使用说明

补充知识: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# is as using