「Unity/Csharp/クラス/ジェネリックメソッド」の版間の差分

提供: 初心者エンジニアの簡易メモ
ナビゲーションに移動 検索に移動
編集の要約なし
29行目: 29行目:
値: 42, 型: Int32
値: 42, 型: Int32
値: Hello, 型: String
値: Hello, 型: String
</pre>
==ジェネリックメソッドのアクションサンプル==
<pre>
using System;
using UnityEngine;
var myAction = new Action<SpecialItem>(item => Debug.Log(item.Name));
Util.ExecuteAction(myAction); // クラスを内部生成
Util.ExecuteAction(myAction, new SpecialItem { Name = "Test" }); // クラスを渡す場合
</pre>
<pre>
using System;
using UnityEngine;
public class Util
{
    // ジェネリックメソッドにして、任意の型 T を受け取れるようにする
    public static void ExecuteAction<T>(Action<T> action, T item)
    {
        action(item);
    }
    // または、T を内部で生成する場合
    public static void ExecuteAction<T>(Action<T> action) where T : new()
    {
        T item = new T();
        action(item);
    }
}
</pre>
出力
<pre>
Special Item
Test
</pre>
</pre>

2025年5月27日 (火) 18:55時点における版

ジェネリックメソッドとは

型を呼び出し側で、宣言できるもの

ジェネリックメソッドのサンプル

呼び出し

// 型省略するパターン(基本はこちら)
Util.DisplayInfo("Hello");
Util.DisplayInfo(42);

// 型省略しないパターン
Util.DisplayInfo<string>("Hello");
Util.DisplayInfo<int>(42);

ジェネリックメソッド本体

public class Util
{
    public static void DisplayInfo<T>(T item)
    {
        Debug.Log($"値: {item}, 型: {typeof(T).Name}");
    }
}

出力

値: 42, 型: Int32
値: Hello, 型: String

ジェネリックメソッドのアクションサンプル

using System;
using UnityEngine;
var myAction = new Action<SpecialItem>(item => Debug.Log(item.Name));
Util.ExecuteAction(myAction); // クラスを内部生成
Util.ExecuteAction(myAction, new SpecialItem { Name = "Test" }); // クラスを渡す場合
using System;
using UnityEngine;

public class Util
{
    // ジェネリックメソッドにして、任意の型 T を受け取れるようにする
    public static void ExecuteAction<T>(Action<T> action, T item)
    {
        action(item);
    }
    // または、T を内部で生成する場合
    public static void ExecuteAction<T>(Action<T> action) where T : new()
    {
        T item = new T();
        action(item);
    }
}

出力

Special Item
Test