Unity/Csharp/クラス/ジェネリックインターフェース
提供: 初心者エンジニアの簡易メモ
2025年5月9日 (金) 13:23時点におけるAdmin (トーク | 投稿記録)による版 (ページの作成:「==ジェネリックインターフェースのサンプル== ===ジェネリック内で、リフレクションを取得パターン=== 呼び出し処理 LoadDialog...」)
ジェネリックインターフェースのサンプル
ジェネリック内で、リフレクションを取得パターン
呼び出し処理
LoadDialogの引数に、色々なクラスを、入れることができる。
var timeDetailDialogParams = new TimeDetailDialogParams(1, () => { Debug.Log("Close"); }); var loadDialogUseCase = new LoadDialogUseCase(); loadDialogUseCase.LoadDialog(timeDetailDialogParams);
ILoadDialogDelegate.cs
public interface ILoadDialogDelegate { void LoadDialog<TParams>(TParams parameters); }
LoadDialogUseCase.cs
using System; using UnityEngine; public class LoadDialogUseCase : ILoadDialogDelegate { public void LoadDialog<TParams>(TParams parameters) { var prop = parameters.GetType().GetProperty("TimeId"); if (prop != null) { int timeId = (int)prop.GetValue(parameters); Debug.Log($"TimeId: {timeId}"); } var closeEventProp = parameters.GetType().GetProperty("CloseEvent"); if (closeEventProp != null) { var closeAction = closeEventProp.GetValue(parameters) as Action; closeAction?.Invoke(); } } }
TimeDetailDialogParams.cs
public class TimeDetailDialogParams { public int TimeId { get; } public Action CloseEvent { get; } public TimeDetailDialogParams(int timeId, Action closeEvent) { TimeId = timeId; CloseEvent = closeEvent; } }