C〓中is、as、usingキーワードの使用説明


一、問題の説明
C〓においてis、as、usingキーワードは、オブジェクトが所与のタイプと互換性があるかどうかを確認するために用いられ、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〓Contructor構造関数は注入します。
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のキーワードの使用説明は小さい編がみんなのすべての内容に分かち合うので、みんなに1つの参考をあげることができることを望んで、みんながよけいに私達を支持することをも望みます。