facebook twitter hatena line email

「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月28日 (水) 03: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