C#-10

C#の学習、ありがとうございます!

前回でモダンなデータ処理の概念を学びましたので、今回は**ファイル操作(I/O)と、コードをきれいに保つための名前空間(Namespaces)静的クラス(Static Classes)**について解説します。


21. ファイル操作 (I/O)

C#でテキストファイルなどのデータを読み書きするには、System.IO 名前空間のクラスを使用します。特によく使うのが、簡単なテキスト操作に便利な File クラスです。

📄 ファイルへの書き込み(WriteAllText)

File.WriteAllText メソッドは、指定されたファイルにテキストを書き込みます。ファイルが存在しない場合は新規作成し、存在する場合は上書きします。

C#

using System.IO;
using System.Text;

string filePath = "data.txt";
string content = "これはテストデータです。\n新しい行です。";

try
{
    // ファイルにテキストを書き込む(UTF-8エンコーディングを使用)
    File.WriteAllText(filePath, content, Encoding.UTF8);
    System.Console.WriteLine($"ファイル '{filePath}' への書き込みが完了しました。");
}
catch (IOException ex)
{
    System.Console.WriteLine($"ファイル書き込みエラー: {ex.Message}");
}

📚 ファイルからの読み込み(ReadAllText)

File.ReadAllText メソッドは、ファイル全体からすべてのテキストを読み込み、一つの文字列として返します。

C#

using System.IO;

string filePath = "data.txt";

try
{
    // ファイルからすべてのテキストを読み込む
    string readContent = File.ReadAllText(filePath);
    
    System.Console.WriteLine("\n--- 読み込んだ内容 ---");
    System.Console.WriteLine(readContent);
}
catch (FileNotFoundException)
{
    System.Console.WriteLine($"エラー: ファイル '{filePath}' が見つかりません。");
}

📝 その他の便利なファイル操作

メソッド処理内容
File.AppendAllText()ファイルの末尾にテキストを追加します(上書きしません)。
File.Exists(path)ファイルが存在するかどうかを bool で返します。
File.Delete(path)指定されたファイルを削除します。
File.ReadAllLines(path)ファイルの内容を行ごとに読み込み、string[](文字列の配列)として返します。

Google スプレッドシートにエクスポート


22. 名前空間 (Namespaces)

名前空間は、クラス、デリゲート、インターフェースなどの型を整理し、名前の衝突を防ぐために使用されます。C#のプロジェクトでは、非常に重要な組織化の単位です。

🏷️ 定義と利用

自分で作成するクラスも、通常は特定の名前空間内に配置します。

C#

// 1. 名前空間の定義
namespace MyProject.Utilities 
{
    // このクラスは MyProject.Utilities 名前空間に属する
    public class Logger 
    {
        public static void Log(string message)
        {
            System.Console.WriteLine($"LOG: {message}");
        }
    }
}

// 2. 別のファイルやクラスでの利用
// usingディレクティブで名前空間をインポート
using MyProject.Utilities; 

public class Program
{
    public static void Main()
    {
        // 名前空間を省略して Logger を使えるようになる
        Logger.Log("アプリケーションが開始されました。");
    }
}

using System;using System.Collections.Generic; など、これまでコードの冒頭に記述してきたものは、すべて標準ライブラリの名前空間をインポートするための宣言です。


23. 静的クラスとメンバー(Static Classes and Members)

⚙️ 静的メンバー (static キーワード)

static キーワードを付けたフィールドやメソッドは、クラスのインスタンス(オブジェクト)を作成せずに直接クラス名を通じて呼び出すことができます。

  • 静的フィールド: クラス全体で共有される唯一のデータ。
  • 静的メソッド: インスタンス(オブジェクト)の状態に依存しない処理。

C#

public class Settings
{
    // staticなフィールド: すべてのSettingsインスタンスで共有される
    public static string Version = "1.0.0";
    
    // staticなメソッド: インスタンスを作成せず呼び出せる
    public static void ShowVersion()
    {
        System.Console.WriteLine($"現在のバージョン: {Version}");
    }
}

// 呼び出し:インスタンスを作成する必要がない
Settings.ShowVersion(); // 出力: 現在のバージョン: 1.0.0

// staticなフィールドは直接変更可能
Settings.Version = "1.0.1";
Settings.ShowVersion(); // 出力: 現在のバージョン: 1.0.1

🧱 静的クラス (static class)

クラス全体を static で宣言すると、そのクラスは静的メンバーのみを含むことが強制され、インスタンス化(new演算子でオブジェクト作成)ができなくなります

ユーティリティ関数やヘルパークラスなど、状態を持たず、機能だけを提供するクラスを作るのに適しています。

C#

// 静的クラスはインスタンス化できない
public static class MathHelper
{
    // すべてのメンバーは静的でなければならない
    public static double Pi = 3.14159;

    public static double CalcCircumference(double radius)
    {
        return 2 * Pi * radius;
    }
}

// 呼び出し
double circumference = MathHelper.CalcCircumference(5.0);
System.Console.WriteLine($"円周: {circumference}");
// new MathHelper(); // これはコンパイルエラーになる

これでC#の基礎的な学習は完了です。これらの知識があれば、ASP.NET Core(Web)、Unity(ゲーム)、WPF/WinForms(デスクトップ)など、あらゆるC#の応用分野に進むことができます。