【Aモデル録 フェーズ1 C#基礎】
👉 using とは、「使い終わった後の処理を、C#に任せる」という宣言です。
もっと正確に言うと、
👉「この参照は、ここまで使ったら必ず片付けてください」という“契約”を結ぶ構文
👉使わなくなったものの後始末を、プログラマーが書かなくて済むようにする構文
です。
現在地の確認をしておきます。
using System;現在地はここ。
この次が、この講義回の説明内容。
using ( 〜 ) { 〜 }混乱するのは正常です。
なぜなら――
using には「役割が違う2種類」がある
からです。
それでは、参りましょう。
using System;
これは、
「このプログラムでは、System という名前空間を使います」
という 宣言 です。
👉 第6章までで見てきた using は、全部こっち。
using ( 〜 )
{
〜
}
これは、
「この中でだけ、ある参照を使います」
という 文(命令) です。
👉 まったく別の役割。
同じ単語なのが紛らわしい。
※違いを視覚的に明確にするため、以降「using ( )」と表記します。
これは明確にしておきます。
class Program
{
static void Main()
{
// ← ここに書く
using ( ... )
{
// 使う処理
}
}
}
つまり、
using System; → プログラム冒頭using ( ) → Main の中👉 場所が違う = 役割が違う。
超シンプルに言います。
「この参照は、ここまで使ったら終わりです」
と C# に伝える仕組み
この 「終わったら」 を
自分で書かなくてよくするのが using ( )。
形だけ見ます。
using (object something = new object())
{
// ここで使う
}
// ← ここを出たら「もう使わない」
※ object は「変数の型」の一つです。
今は「型名がここに書かれる」ということだけ理解しておいてください。
今は、コードの意味ではなく、以下のポイントを押えてください。
using ( ) は「範囲を作る」{ } の中だけ有効参照の概念とつながります。
まだ、解説にはありませんでしたが、
null や try-catch とは役割が違う安全装置になります。
前述したとおり。
放置すると、
が解放されない
ここで出てくる問い:
「いつ、誰が、後始末するの?」
using ( ) は 魔法ではありません。
内部的には、こういう契約です。
「この型は
IDisposableを実装している」
↓
「だからDispose()という後始末メソッドを持っている」
↓
「using は、スコープを抜けた瞬間にDispose()を 必ず 呼ぶ」
例外が起きても、必ず。
今は、「だから何をやってるの?」と感じる契約内容。
でも、実はここが一番重要。
プログラマーの認識が、
「知らなくても使える魔法」と、「大事なことをしてくれる機能」とでは、ずいぶん変わります。
❌ using は「メモリを解放する」
→ 違う
✅ using は
「管理対象外の資源(ファイル・通信など)を閉じる」
メモリの解放は、GC(ガベージコレクタ)の仕事。
「GC(ガベージコレクタ)」とは
プログラムが使用しなくなったメモリ領域(不要なオブジェクト)を自動的に検出し、解放(回収)する仕組みで、
「ごみ集め」を意味します
これだけをおさえておいてください。