「Unity/Csharp/クラス/ジェネリックインターフェース」の版間の差分
ナビゲーションに移動
検索に移動
ページの作成:「==ジェネリックインターフェースのサンプル== ===ジェネリック内で、リフレクションを取得パターン=== 呼び出し処理 LoadDialog...」 |
編集の要約なし |
||
| 15行目: | 15行目: | ||
public interface ILoadDialogDelegate | public interface ILoadDialogDelegate | ||
{ | { | ||
void LoadDialog<TParams>(TParams parameters); | void LoadDialog<TParams>(TParams parameters) where TParams : class; | ||
} | } | ||
</pre> | </pre> | ||
| 26行目: | 26行目: | ||
public class LoadDialogUseCase : ILoadDialogDelegate | public class LoadDialogUseCase : ILoadDialogDelegate | ||
{ | { | ||
public void LoadDialog<TParams>(TParams parameters) | public void LoadDialog<TParams>(TParams parameters) where TParams : class | ||
{ | { | ||
var prop = parameters.GetType().GetProperty("TimeId"); | var prop = parameters.GetType().GetProperty("TimeId"); | ||
2025年5月9日 (金) 04:45時点における版
ジェネリックインターフェースのサンプル
ジェネリック内で、リフレクションを取得パターン
呼び出し処理
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) where TParams : class;
}
LoadDialogUseCase.cs
using System;
using UnityEngine;
public class LoadDialogUseCase : ILoadDialogDelegate
{
public void LoadDialog<TParams>(TParams parameters) where TParams : class
{
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;
}
}