C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: デリゲートに追加した匿名メソッドを削除する方法


(過去ログ 144 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■84315 / inTopicNo.1)  デリゲートに追加した匿名メソッドを削除する方法
  
□投稿者/ Roid (1回)-(2017/06/14(Wed) 10:23:30)

分類:[.NET 全般] 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public delegate void TimerEventHandler(int time);

【1つめのクラス TimeCounter】
public class TimeCounter : MonoBehaviour
{
//イベントハンドラ
public event TimerEventHandler OnTimeChanged;

void Start ()
{
//タイマ起動
StartCoroutine(TimerCoroutine());
}

IEnumerator TimerCoroutine()
{
int time = 100;
while(time > 0)
{
time--;
OnTimeChanged(time);

//1秒待つ
yield return new WaitForSeconds(1);
}
}
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//============ADD=================
using UnityEngine.UI;

【2つ目のクラスTimerView】

public class TimerView : MonoBehaviour
{
[SerializeField] private TimeCounter timeCounter;
[SerializeField] private Text counterText;


void Start ()
{
//TimeCounterにあるデリゲートを外部から変更する
timeCounter.OnTimeChanged += (time) =>
{
//タイムの値をUIに反映する
counterText.text = time.ToString();
};
}
}

上記のように2つのクラスがあり
TimeViewクラスの方で
event修飾子のついた
デリゲートに匿名メソッドの処理を追加しています。

匿名メソッドをデリゲートに追加した場合
デリゲートから削除するにはどうすればよいのでしょうか?

匿名ではなく、通常のstaticメソッドを追加した場合は
timeCounter.OnTimeChanged -= 【定義されたstaticメソッド】
これでいけると思うのですが

匿名メソッドの場合は削除方法がわかりません
教えてください、お願いします

引用返信 編集キー/
■84316 / inTopicNo.2)  Re[1]: デリゲートに追加した匿名メソッドを削除する方法
□投稿者/ Hongliang (550回)-(2017/06/14(Wed) 10:32:18)
一旦変数に確保しておいて、それを-=する形になります。
変数がローカル変数かメンバ変数かなどは、削除する位置次第です。

TimerEventHandler handler = null;
handler = (time) =>
{
    //タイムの値をUIに反映する
    counterText.text = time.ToString();
    timerCounter.OnTimeChanged -= handler;
};
timeCounter.OnTimeChanged += handler;

引用返信 編集キー/
■84317 / inTopicNo.3)  Re[1]: デリゲートに追加した匿名メソッドを削除する方法
□投稿者/ PANG2 (179回)-(2017/06/14(Wed) 10:38:36)
名前を付ければよいです。

TimerEventHandler h = (time) => { counterText.text = time.ToString(); };

//追加
OnTimeChanged += h;

//削除
OnTimeChanged -= h;


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -