中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

is、as與using關鍵字如何在C#中使用

發布時間:2020-12-08 15:10:51 來源:億速云 閱讀:175 作者:Leah 欄目:開發技術

這篇文章給大家介紹is、as與using關鍵字如何在C#中使用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

一、問題描述

在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, "錯誤信息");
     }
     
    }
   }
   
  }
 }
}

三、顯示結果

is、as與using關鍵字如何在C#中使用

is、as與using關鍵字如何在C#中使用

補充知識: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());

關于is、as與using關鍵字如何在C#中使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

is as
AI

海林市| 乳山市| 澳门| 泗水县| 沂水县| 桐柏县| 安乡县| 始兴县| 铜鼓县| 宁化县| 中西区| 新兴县| 海城市| 武隆县| 怀远县| 乡城县| 鄂托克旗| 恩平市| 加查县| 溧水县| 河源市| 恭城| 兴城市| 横山县| 邵阳市| 江达县| 宜州市| 五华县| 嵊泗县| 根河市| 金溪县| 资中县| 赤壁市| 诸城市| 北宁市| 外汇| 洛扎县| 临清市| 滨海县| 宁强县| 宜兰市|