facebook twitter hatena line email

「Unity/Csharp/クラス/ジェネリックインターフェース」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(parameters.GetType().GetProperty("CloseEvent")が取得できないとき)
(parameters.GetType().GetProperty()が取得できないとき)
 
(同じ利用者による、間の1版が非表示)
行60: 行60:
  
 
==parameters.GetType().GetProperty()が取得できないとき==
 
==parameters.GetType().GetProperty()が取得できないとき==
例:
+
例として、以下がnullになるとき
  parameters.GetType().GetProperty("CloseEvent")
+
  if (parameters.GetType().GetProperty("CloseEvent") == null) {
 
以下のget;があるか確認。
 
以下のget;があるか確認。
 
  public Action CloseEvent { get; }
 
  public Action CloseEvent { get; }
 +
setもしたいときはこちら。
 +
public Action CloseEvent { get; set; }

2025年5月13日 (火) 02:18時点における最新版

ジェネリックインターフェースのサンプル

ジェネリック内で、リフレクションを取得パターン

呼び出し処理

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;
    }
}

parameters.GetType().GetProperty()が取得できないとき

例として、以下がnullになるとき

if (parameters.GetType().GetProperty("CloseEvent") == null) {

以下のget;があるか確認。

public Action CloseEvent { get; }

setもしたいときはこちら。

public Action CloseEvent { get; set; }