服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#中is,as,using关键字的使用说明

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

2022-10-20 13:04tongyuehong C#

这篇文章主要介绍了C#中is,as,using关键字的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一、问题描述

在C#中is,as,using关键字具有其特点及使用场景,其中is关键字用于检查该对象是否与给定类型兼容,as关键字用于将对象转换为指定类型,using关键字除了用于引入命名空间之外,还具有回收对象资源,如文件资源、网络资源和数据库资源等。

1、is:用于检查对象是否与给定类型兼容,如果兼容,则返回true,否则返回false,不会抛出异常。在进行类型转换之前,可以先用is判断对象是否与给定类型兼容,如果兼容再进行转换。

案例:

?
1
2
3
string str ="test";
object obj = str;
if(obj is string) {string str2 = (string)obj};

2、as:用于引用类型之间转换,直接进行转换,若转换成功,则返回转换后的对象,若转换失败返回null,不抛出异常。

案例:

?
1
2
3
4
string str ="test";
object obj = str;
string str2 = obj as tring;
if(str2 !=null) {转换成功}

3、using:引用命名空间,有效回收资源,using关键字可以回收多个对象的资源,关键字后面的小括号内创建的对象必须实现IDisposable接口,或者该类的基类已经实现了IDisposable接口。回收资源的时机是在using关键字下面的代码块执行完成之后自动调用接口方法Dispose()销毁对象。

案例:

?
1
2
3
4
using (Test test =new Test()) { 各种操作;}
 calss Test :IDisposable {
   public void Dispose() {回收操作;}
 }

二、代码案例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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、创建接口

?
1
2
3
4
5
public interface ITimeProvider
 {
   DateTime CurrentDate { get; }
   string CurrentYear { get; }
 }

2、继承接口,实现类

?
1
2
3
4
5
public class TimeProvider : ITimeProvider
 {
   public DateTime CurrentDate { get { return DateTime.Now; } }
   public string CurrentYear { get { return DateTime.Now.Year.ToString(); } }
 }

3、创建注入机制

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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、客户端调用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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、使用实现

?
1
2
3
4
ITimeProvider timeProvider = (new Assembler()).Create<ITimeProvider>();
   Client clinet = new Client(timeProvider);
   Console.WriteLine(clinet.GetYear());
   Console.WriteLine(clinet.GetDatetime());

以上这篇C#中is,as,using关键字的使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/tongyuehong137/article/details/51395298

延伸 · 阅读

精彩推荐
  • C#C#中Winform 实现Ajax效果自定义按钮

    C#中Winform 实现Ajax效果自定义按钮

    这篇文章主要介绍了C#中Winform 实现Ajax效果自定义按钮的相关资料,需要的朋友可以参考下...

    数据酷软件9012022-02-17
  • C#C#获取文件MD5值的实现示例

    C#获取文件MD5值的实现示例

    文件的md5值,即文件签名,为了验证文件的正确性,是否被恶意篡改等。每个文件有一个唯一的md5。下面这篇文中就给大家介绍了如何利用C#获取文件MD5值...

    辰晓晨11642021-12-14
  • C#C#如何防止程序多次运行的技巧

    C#如何防止程序多次运行的技巧

    这篇文章主要为大家详细介绍了C#如何防止程序多次运行的技巧,供大家参考,感兴趣的小伙伴们可以参考一下...

    C#教程网9132021-11-17
  • C#详解C# 中的正则表达式运用

    详解C# 中的正则表达式运用

    这篇文章主要介绍了C# 中的正则表达式运用的相关资料,需要的朋友可以参考下...

    孤者自清8432022-01-10
  • C#C#中datagridview使用tooltip控件显示单元格内容的方法

    C#中datagridview使用tooltip控件显示单元格内容的方法

    这篇文章主要介绍了C#中datagridview使用tooltip控件显示单元格内容的方法,实例分析了C#控件的相关使用技巧,需要的朋友可以参考下...

    aparche7642021-11-24
  • C#C# LINQ的基本使用方法示例

    C# LINQ的基本使用方法示例

    这篇文章主要给大家介绍了关于C# LINQ的基本使用教程,文中通过示例代码介绍的非常详细,对大家学习或者使用C# LINQ具有一定的参考学习价值,需要的朋...

    秦国庆10002022-10-07
  • C#C#中的DateTime是值类型还是引用类型

    C#中的DateTime是值类型还是引用类型

    近期遇到了DateTime到底是值类型还是引用类型的疑惑,顺势较深入地了解一下DateTime相关的内容,大家有需要的朋友可以参考下...

    zhixin90018332021-12-31
  • C#浅谈c#中config.exe 引发的一些问题

    浅谈c#中config.exe 引发的一些问题

    下面小编就为大家分享一篇浅谈c#中config.exe 引发的一些问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    我是外婆5722022-02-12