質問

ユーザー kokos 回答の素晴らしい 隠れた特徴のC# 質問によるもの using キーワードとなります。だと考えている。す。何に利用 using?

役に立ちましたか?

解決

その理由の using 決するためのオブジェクトが配置されま範囲、必要としないことから明示的なコードを確保することなどが挙げられる。

として を理解する'を'算書クライアントまで、フルのC#, の.純CLRに変換します

using (MyResource myRes = new MyResource())
{
    myRes.DoSomething();
}

{ // Limits scope of myRes
    MyResource myRes= new MyResource();
    try
    {
        myRes.DoSomething();
    }
    finally
    {
        // Check for a null resource.
        if (myRes != null)
            // Call the object's Dispose method.
            ((IDisposable)myRes).Dispose();
    }
}

他のヒント

以来、たくさんの人がい:

using (System.IO.StreamReader r = new System.IO.StreamReader(""))
using (System.IO.StreamReader r2 = new System.IO.StreamReader("")) {
   //code
}

さんの人々はまだ知らなることができるの?

using (System.IO.StreamReader r = new System.IO.StreamReader(""), r2 = new System.IO.StreamReader("")) {
   //code
}

もののようになります:

using (var conn = new SqlConnection("connection string"))
{
   conn.Open();

    // Execute SQL statement here on the connection you created
}

この SqlConnection を閉鎖せずに明示的に呼び出さ .Close() 機能は、このことが起こる 場合でも、例外がスローされます, 無し必要 try/catch/finally.

利用できる電話IDisposable.も使用できる別名です。

using (SqlConnection cnn = new SqlConnection()) { /*code*/}
using f1 = System.Windows.Forms.Form;

を用いという意味では

using (var foo = new Bar())
{
  Baz();
}

実際の表記は試してみ/ついにブロックです。に相当するもので、コード:

var foo = new Bar();
try
{
  Baz();
}
finally
{
  foo.Dispose();
}

ご注はもちろん、その最初のスニペットは簡潔にも多くの種類のことをすることがしたいなどの清掃活動の場合でも、例外がスローされます。このため、まちのクラスを範囲ることを可能にする任意のコードを実行したりするの処理方法。そのため、たとえば、た物件というIsWorkingクティブを書いてくださいためfalseに設定されるようにして行うオペレーション、まだようこ:

using (new Scope(() => IsWorking = false))
{
  IsWorking = true;
  MundaneYetDangerousWork();
}

につなげていくかを学びます弊社のソリューションという由来で こちらの.

に使用しましたので多くの作業に入力および出力ストリーム.ネストすることができて良では多くの潜在的な問題で、通常走行により自動的に呼び出し処理).例えば:

        using (FileStream fs = new FileStream("c:\file.txt", FileMode.Open))
        {
            using (BufferedStream bs = new BufferedStream(fs))
            {
                using (System.IO.StreamReader sr = new StreamReader(bs))
                {
                    string output = sr.ReadToEnd();
                }
            }
        }

Microsoft書る を使用 ダブル機能https://msdn.microsoft.com/en-us/library/zhdeatwt.aspxについて 指令諸表.として , ったので、とても指摘でその他の回答のキーワードは基本的には統語的には砂糖を決定する範囲を処理する IDisposable オブジェクトです。として 指令, すでに日常的に利用されている輸入の名前空間と種類です。もしディレクティブを作成でき エイリアス のための名前空間と種類を指摘されているように、本書は"C#5.0このように:決定版ガイド"(http://www.amazon.com/5-0-Nutshell-The-Definitive-Reference-ebook/dp/B008E6I1K8よりジョセフ-ナAlbahari.一例:

namespace HelloWorld
{
    using AppFunc = Func<IDictionary<DateTime, string>, List<string>>;
    public class Startup
    {
        public static AppFunc OrderEvents() 
        {
            AppFunc appFunc = (IDictionary<DateTime, string> events) =>
            {
                if ((events != null) && (events.Count > 0))
                {
                    List<string> result = events.OrderBy(ev => ev.Key)
                        .Select(ev => ev.Value)
                        .ToList();
                    return result;
                }
                throw new ArgumentException("Event dictionary is null or empty.");
            };
            return appFunc;
        }
    }
}

この採用に賢く、虐待の実践で傷つの明確性が損なわれる形のコードです。よくあるご説明のうち、C#のエイリアス、またも是非、DotNetPearls(http://www.dotnetperls.com/using-alias).

を追及するとともに少しもっているわけではありません。最も興味深い特徴を用いた私の考えではないことを母方の出口を利用であって、事実の表明ではなく、常に処分するオブジェクトです。これを返し、例外をスローしました。

using (var db = new DbContext())
{
    if(db.State == State.Closed) throw new Exception("Database connection is closed.");
    return db.Something.ToList();
}

な場合、例外がスローされたリストが返されます。のDbContextオブジェクトは常に廃棄することができます

他の利用はお断りすることがありスをインスタンス化する際に、モーダルダイアログを表示します。

Using frm as new Form1

Form1.ShowDialog

' do stuff here

End Using

その結果、ご利用の際はローカル変数の型を実装した IDisposable, 常に, り、例外なく、利用 using1.

ご利用の場合は非局所的 IDisposable 変数は、 常に の実施を IDisposable パターン.

簡単な規則の例外ではない1.防止材の漏えいなが本当に苦痛とのss.


1):唯一の例外は–ときの取り扱い例外をスローしました。でもそれ以下のコードを呼 Dispose 明示的に finally ブロックです。

興味深いことにも利用できます使用/IDisposableパターンのためのその他の興味深いことなどのその他のポイントのサイ疑似を用いる。原則的には個人契約の場合は、ご利用できないことにもコンパイラまで 常に ます。廃棄上の"使用"オブジェクトです。何かございましたが必要な一定操作---るという明確なタ...そしてできることIDisposableクラス開始の操作のコンストラクタ、仕上げの処理方法。

これは本当に素敵な利用のための構文で表示を明確にし、その開始と終了います。これもどのようにシステム。取引ものです。

手軽に取得することができ、エイリアスの名前空間による以下の例:

using LegacyEntities = CompanyFoo.CoreLib.x86.VBComponents.CompanyObjects;

これが" 使用aliasディレクティブ ときにも使用でき隠冗長に参照すべきかくコードでそれ 例えば

LegacyEntities.Account

の代わりに

CompanyFoo.CoreLib.x86.VBComponents.CompanyObjects.Account

または単に

Account   // It is not obvious this is a legacy entity

利用の場合ADO.NET で利用できますkeyworkう接続オブジェクトまたはreaderオブジェクトです。このコードブロック完了まで自動的に処理します。

"使用"もできてを解釈処理するのに使う名前です。見 http://www.davidarno.org/c-howtos/aliases-overcoming-name-conflicts/ 短チュートリアルに書いたのです。

public class ClassA:IDisposable

{
   #region IDisposable Members        
    public void Dispose()
    {            
        GC.SuppressFinalize(this);
    }
    #endregion
}

public void fn_Data()

    {
     using (ClassA ObjectName = new ClassA())
            {
                //use objectName 
            }
    }

を使用 る際に使用してはるかに上回るリソースにしたい処理の後で利用されてきました。

のためのインスタンスの場合割り当てをファイルリソースだけを利用する必要がで一部のコードを少し読み取りまたは書き込み、利用に役に立つの処理にファイルリソースとして行われます。

の資源利用の実施が必要IDisposable。

例:

using (File file = new File (parameters))
{
    *code to do stuff with the file*
}

使用中のキーワードを定義する範囲のためのオブジェクトとそれを破棄して、このオブジェクトの範囲が完了します。ります。

using (Font font2 = new Font("Arial", 10.0f))
{
    // use font2
}

こちらの にMSDNのC#用キーワードとなります。

せることで超重要ですが、使用にも使用でき変更資源ができます。ありの使い捨て、前述のとおり、も具体的にはきたいと思っている資源のミスマッチその他の資源の中に、実行します。だいたいで廃棄さな干渉します。

へのコメント下の清掃をさせて頂きますモーターパラグライダー(わないんで使用したもので、ゴミのコレクション"の時に、お):
ご利用の際は利用での通話は、Dispose()メソッドのオブジェクトの末尾に用いのです。できますので時間が十分にとれなかったのでビットの清掃活動コードDispose()メソッドがあります。
弾丸だけると思いこの国連markeddown:を実装する場合IDisposableただくには、電話ます。SuppressFinalize()おDispose()の実装では、その自動収集に努め、確かに少なくともう廃棄物の資源んでしまっていたらDispose()dのです。

別の例としては、訂正、利用停止、利用目的の通知のオブジェクトを速やかに削除-廃棄され:

using (IDataReader myReader = DataFunctions.ExecuteReader(CommandType.Text, sql.ToString(), dp.Parameters, myConnectionString)) 
{
    while (myReader.Read()) 
    {
        MyObject theObject = new MyObject();
        theObject.PublicProperty = myReader.GetString(0);
        myCollection.Add(theObject);
    }
}

全ての外に巻きブラケットが配置され、その処分自物を使用しているのではない場合。なぜなら、いSqlDataAdapterオブジェクトを使用で一度だけのライフサイクルで充填でのデータセットなどでも利用可能です(コード:

using(SqlDataAdapter adapter_object = new SqlDataAdapter(sql_command_parameter))
{
   // do stuff
} // here adapter_object is disposed automatically

のを提供する利便性の機構を正しく使用IDisposableオブジェクト。は、原則としてご利用の際は、IDisposableオブジェクトは、ことを宣言し、インスタンスを生成で使用。使用中の声明の処理方法のオブジェクトを正しい方法、および(場合に使用するととして示したものオブジェクト自体の範囲としてすぐに処理が呼び出されます。内での利用をブロック、オブジェクトは読み出し専用(read-only)と読み書で改変を行うことはできませんまたは再割り当て.

これから: こちらの

私にとっての名称の使用"とは、少し混乱ができるディレクティブをインポートするには名前空間または書きのようないくつかについてはここで論じ)。

別の名前についてはいっても、その国のか明になります。

で用いてもよいとされています。を範例えば:

class LoggerScope:IDisposable {
   static ThreadLocal<LoggerScope> threadScope = 
        new ThreadLocal<LoggerScope>();
   private LoggerScope previous;

   public static LoggerScope Current=> threadScope.Value;

   public bool WithTime{get;}

   public LoggerScope(bool withTime){
       previous = threadScope.Value;
       threadScope.Value = this;
       WithTime=withTime;
   }

   public void Dispose(){
       threadScope.Value = previous;
   }
}


class Program {
   public static void Main(params string[] args){
       new Program().Run();
   }

   public void Run(){
      log("something happend!");
      using(new LoggerScope(false)){
          log("the quick brown fox jumps over the lazy dog!");
          using(new LoggerScope(true)){
              log("nested scope!");
          }
      }
   }

   void log(string message){
      if(LoggerScope.Current!=null){
          Console.WriteLine(message);
          if(LoggerScope.Current.WithTime){
             Console.WriteLine(DateTime.Now);
          }
      }
   }

}

使用中の声を伝えます。当期純にリリースを指定したオブジェクトをブロックを一度は必要ありません。その利用に'ブロックのための授業を必要とする清掃しています。IOます。

あの利用をキーワードクライアントまで、フルのC#としております。

  1. としてディレクティブ

一般的に使用していを利用するためのキーワードを追加-名前空間コード後、クラスファイルです。その後でご利用のすべてのクラス、インタフェースや抽象クラスとその方法や性質に現在のページです。

Ex:

using System.IO;  
  1. として計算書

この方法のひとつです。利用をキーワードのC#.その役割を果たパフォーマンス改善を目的にガベージコレクション使用中の計算書るDispose()が呼び出された場合でも例外が発生したときオブジェクトの作成および呼び出しメソッド、プロパティです。Dispose()する方法は、IDisposableインタフェースを実装カスタムガベージコレクションその場合はやって一部のデータベース操作の挿入、更新、削除)が何らかの例外が発生してこちらの声を閉じ、接続さい。必要なの接近()メソッドを明確にした。

もうひとつの重要な要因できることで、接続プール.接続プールです。純防のデータベース接続ます。このconnectionオブジェクトには将来の使用のためにプール(次のデータベースけます。次のデータベース接続するというアプリケーションは、接続プールを取り出し物内プールがあります。この性能が向上します。で利用する場合は、使用中の計算書のコントローラを送信するオブジェクトへの接続プール、自動的にする必要がないのClose()、Dispose()メソッドを明確にした。

おなじて何を書いて利用がtry-catchブロックを呼び出Dispose()の最後にブロックを明確にした。ものを書いの電話を自動的に、コードクリーナーがあります。内での利用をブロック、オブジェクトは読み出し専用(read-only)と読み書で改変を行うことはできませんまたは再割り当て.

Ex:

    string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";  

using (SqlConnection conn = new SqlConnection(connString))  
{  
      SqlCommand cmd = conn.CreateCommand();  
      cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";  
      conn.Open();  
      using (SqlDataReader dr = cmd.ExecuteReader())  
      {  
         while (dr.Read())  
         Console.WriteLine("{0}\t{1}", dr.GetString(0), dr.GetString(1));  
      }  
}  

前のコード私は必ず閉めたものであります。使用中の決着コネチカット州.Close()自動的による利用の算書を使用しSqlConnection conn=new SqlConnection(connString))と同じめSqlDataReaderオブジェクトです。とも何らかの例外が発生した場合はで、接続を閉じます。

詳細--> https://www.c-sharpcorner.com/UploadFile/manas1/usage-and-importance-of-using-in-C-Sharp472/

サイ疑似の記録-再生の書式 この面白い利用 using.

として利用して計算書自動的に通話の処分の指定 オブジェクトです。のオブジェクトを実装する必要のIDisposableインターフェース。であ 利用可能オブジェクトの整列を一つの声明と 同一の型でなくてはなりません。

のCLR変換コードを入MSIL.のを得て翻訳してみた。これはどのように使算して表示されています。使用書に翻訳の三部の取得、利用、廃棄に至るまでのすべてのリソースを最初に取得し、その利用に囲まれ、try、最後に提供しています。のオブジェクトを取得し処理の最後に提供しています。

使用条項を定義するために使用される範囲の特定の変数となります。例えば:

     Using(SqlConnection conn=new SqlConnection(ConnectionString)
            {
                Conn.Open()
            // Execute sql statements here.
           // You do not have to close the connection explicitly here as "USING" will close the connection once the object Conn becomes out of the defined scope.
            }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top