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

 更新时间:2020年12月07日 14:45:42   作者:tongyuehong  
这篇文章主要介绍了C#中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关键字的使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C#反射(Reflection)详解

    C#反射(Reflection)详解

    本文详细讲解了C#中的反射(Reflection),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#从文件或标准输入设备读取指定行的方法

    C#从文件或标准输入设备读取指定行的方法

    这篇文章主要介绍了C#从文件或标准输入设备读取指定行的方法,涉及C#文件及IO操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • 浅谈C#多线程下的调优

    浅谈C#多线程下的调优

    本文主要介绍了C#多线程下的调优,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • UGUI实现4位验证码输入

    UGUI实现4位验证码输入

    这篇文章主要为大家详细介绍了UGUI实现4位验证码输入,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • unity里获取text中文字宽度并截断省略的操作

    unity里获取text中文字宽度并截断省略的操作

    这篇文章主要介绍了unity里获取text中文字宽度并截断省略的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • C#中的多播委托和泛型委托

    C#中的多播委托和泛型委托

    这篇文章介绍了C#中的多播委托和泛型委托,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#使用时序数据库InfluxDB的教程详解

    C#使用时序数据库InfluxDB的教程详解

    InfluxDB是一个开源的时序数据库,可以自动处理时间序列数据,这篇文章主要为大家详细介绍了C#如何使用InfluxDB,感兴趣的小伙伴可以跟随小编一起了解下
    2023-11-11
  • C#中关于可空类型的小知识

    C#中关于可空类型的小知识

    这篇文章主要介绍了C#中关于可空类型的小知识,本文讲解可空类型运算的小技巧,需要的朋友可以参考下
    2015-04-04
  • Unity调用手机摄像机识别二维码

    Unity调用手机摄像机识别二维码

    这篇文章主要为大家详细介绍了Unity调用手机摄像机识别二维码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 解析C#中的私有构造函数和静态构造函数

    解析C#中的私有构造函数和静态构造函数

    这篇文章主要介绍了C#中的私有构造函数和静态构造函数,是C#入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01

最新评论