ReferenceHandle RegisterImpl(object recipient, string eventName, Action action, bool weakreference = false) { if (recipient == null) { throw new ArgumentNullException("recipient"); } if (GetHolders <IHolder>(recipient, eventName).Any(x => x.IsSame(recipient, action))) { //イベント登録済み return(ReferenceHandle.Empty); } if (!weakreference) { var holder = new Holder { EventName = eventName, Recipient = new WeakReference <object>(recipient), Action = action }; m_Events.Add(holder); return(ReferenceHandle.Empty); } else { var holder = new WeakReferenceHolder { EventName = eventName, Recipient = new WeakReference <object>(recipient), Action = new WeakReference <Action>(action) }; var handle = new ReferenceHandle(action, holder); holder.Handle = new WeakReference <ReferenceHandle>(handle); m_Events.Add(holder); return(handle); } }
public override bool IsActive() { return(base.IsActive() && Action.TryGetTarget(out _) && ReferenceHandle.IsActive(Handle)); }