|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Diagnostics;
namespace CBR.Core.Helpers
{
/// <summary>
/// This class creates a weak delegate of form Action(Of Object)
/// </summary>
public class WeakAction
{
#region Data
private readonly WeakReference _target;
private readonly Type _ownerType;
private readonly Type _actionType;
private readonly string _methodName;
#endregion
#region Public Properties/Methods
public WeakAction(object target, Type actionType, MethodBase mi)
{
if (target == null)
{
Debug.Assert(mi.IsStatic);
_ownerType = mi.DeclaringType;
}
else
_target = new WeakReference(target);
_methodName = mi.Name;
_actionType = actionType;
}
public Type ActionType
{
get { return _actionType; }
}
public bool HasBeenCollected
{
get
{
return (_ownerType == null && (_target == null || !_target.IsAlive));
}
}
public Delegate GetMethod()
{
if (_ownerType != null)
{
return Delegate.CreateDelegate(_actionType, _ownerType, _methodName);
}
if (_target != null && _target.IsAlive)
{
object target = _target.Target;
if (target != null)
return Delegate.CreateDelegate(_actionType, target, _methodName);
}
return null;
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
WPF and MVVM fan, I practice C # in all its forms from the beginning of the NET Framework without mentioning C ++ / MFC and other software packages such as databases, ASP, WCF, Web & Windows services, Application, and now Core and UWP.
In my wasted hours, I am guilty of having fathered C.B.R. and its cousins C.B.R. for WinRT and UWP on the Windows store.
But apart from that, I am a great handyman ... the house, a rocket stove to heat the jacuzzi and the last one: a wood oven for pizza, bread, and everything that goes inside
https://guillaumewaser.wordpress.com/
https://fouretcompagnie.wordpress.com/