Revision: 29987
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 6, 2010 01:04 by jmillerit
Initial Code
public class SingletonClassName { #region EventArg Declarations public class SingletonClassNameEventArgs : EventArgs { #region Properties public PropertyDataType PropertyName { get; set; } #endregion #region Constructors public SingletonClassNameEventArgs(PropertyDataType _PropertyName) { this.PropertyName = _PropertyName; } #endregion } #endregion #region Variable Declarations private static readonly SingletonClassName _instance = new SingletonClassName(); private static object _threadSynchronizationHandle = null; #endregion #region Constructors //Note that we are making the constructor private. Doing so ensures that the class cannot //be directly instantiated which is one of the principles of the Singleton pattern. private SingletonClassName() { } #endregion #region Singleton Access Point public static SingletonClassName Instance { get { lock (GetThreadSynchronizationHandle()) { return _instance; } } } #endregion #region Thread Synchronization Handles private static object GetThreadSynchronizationHandle() { //When the thread synchronization handle object is requested, we use the CompareExchange //method of the Interlocked class to see if the value is null. If it is null, then we //will create the new object. If it is not null then we will return the previously //allocated lock target. Interlocked.CompareExchange(ref _threadSynchronizationHandle, new object(), null); return _threadSynchronizationHandle; } #endregion #region Public Event Handlers public event EventHandler<SingletonClassNameEventArgs> OnRaiseEventNameEvent; #endregion #region Public Raise Event Handlers public void RaiseEventNameEvent(SingletonClassNameEventArgs e) { //Note that we are making a temporary copy of the event to avoid the possibility of a race //condition if the last subscriber of the event unsubscribes immediately after //the null check and before the actual event is raised. EventHandler<SingletonClassNameEventArgs> eventHandler = OnRaiseEventNameEvent; //We will only raise the event if there are subscribers to the event. if (eventHandler != null) { eventHandler(this, e); } } #endregion #region Public Methods #endregion #region Private Methods #endregion }
Initial URL
Initial Description
Initial Title
Singleton With Event Handler
Initial Tags
Initial Language
C#