您好,登錄后才能下訂單哦!
這篇文章給大家介紹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, "錯誤信息"); } } } } } }
三、顯示結果
補充知識: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#中使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。