Click here to Skip to main content
13,000,164 members (47,205 online)

Eddy Vluggen - Professional Profile


    Blog RSS
I'm a Delphi-convert, mostly into WinForms and C#. My first article is from 2001, extending the Delphi-debugger, which is still visible on the WayBackMachine[^] and even available in Russian[^] Smile | :)
  • 31 Dec 2012: CodeProject MVP 2013
  • 31 Dec 2009: CodeProject MVP 2010



Below is the list of groups in which the member is participating

CodeProject Beta Testers
United States United States
No Biography provided
Group type: Collaborative Group
This member has Group Status: Member



For more information on Reputation please see the FAQ.


Members need to achieve at least one of the given member levels in the given reputation categories in order to perform a given action. For example, to store personal files in your account area you will need to achieve Platinum level in either the Author or Authority category. The "If Owner" column means that owners of an item automatically have the privilege, and the given member types also gain the privilege regardless of their reputation level.

ActionAuthorAuthorityDebatorEditorEnquirerOrganiserParticipantIf OwnerMember Types
Have no restrictions on voting frequencysilversilversilversilverAdmin
Bypass spam checks when posting contentsilversilversilversilversilversilversilverSitebuilder, Subeditor, Mentor, Protector, Editor, Staff, Admin
Store personal files in your account areaplatinumplatinumSitebuilder, Subeditor, Supporter, Editor, Staff
Have live hyperlinks in your biographybronzebronzebronzebronzebronzebronzesilverSubeditor, Protector, Editor, Staff, Admin
Edit a Question in Q&AsilversilversilversilverYesSubeditor, Protector, Editor, Admin
Edit an Answer in Q&AsilversilversilversilverYesSubeditor, Protector, Editor, Admin
Delete a Question in Q&AYesSubeditor, Protector, Editor, Admin
Delete an Answer in Q&AYesSubeditor, Protector, Editor, Admin
Report an ArticlesilversilversilversilverSubeditor, Mentor, Protector, Editor, Staff, Admin
Approve/Disapprove a pending ArticlegoldgoldgoldgoldSubeditor, Mentor, Protector, Editor, Staff, Admin
Edit other members' articlesSubeditor, Protector, Editor, Admin
Create an article without requiring moderationplatinumSubeditor, Mentor, Protector, Editor, Staff, Admin
Approve/Disapprove a pending QuestionProtector, Admin
Approve/Disapprove a pending AnswerProtector, Admin
Report a forum messagesilversilverbronzeProtector, Editor, Admin
Approve/Disapprove a pending Forum MessageProtector, Admin
Create a new tagsilversilversilversilverAdmin
Modify a tagsilversilversilversilverAdmin

Actions with a green tick can be performed by this member.

GeneralBookmarks Pin
Eddy Vluggen18-Mar-11 4:14
memberEddy Vluggen18-Mar-11 4:14 
GeneralRelated Utilities Pin
Eddy Vluggen2-Mar-12 12:10
memberEddy Vluggen2-Mar-12 12:10 
NewsOnline tools Pin
Eddy Vluggen14-Mar-12 8:21
memberEddy Vluggen14-Mar-12 8:21 
NewsCustom Controls / Libraries Pin
Eddy Vluggen9-Apr-12 9:54
memberEddy Vluggen9-Apr-12 9:54 
NewsDebugging Pin
Eddy Vluggen26-Apr-12 22:02
memberEddy Vluggen26-Apr-12 22:02 
NewsDesign Patterns Pin
Eddy Vluggen17-Jun-12 0:25
memberEddy Vluggen17-Jun-12 0:25 
GeneralRefactorings Pin
Eddy Vluggen7-Oct-10 12:55
mvpEddy Vluggen7-Oct-10 12:55 
GeneralRe: Refactorings Pin
Vercas26-Dec-10 5:31
memberVercas26-Dec-10 5:31 
News.NET related snippets Pin
Eddy Vluggen5-Oct-10 9:58
mvpEddy Vluggen5-Oct-10 9:58 
GeneralTemporaryOverride class Pin
Eddy Vluggen5-Oct-10 10:15
mvpEddy Vluggen5-Oct-10 10:15 
Sometimes you'd temporarily want to change the value of a variable, and the most common pattern is probably the one below;
string temp = someObject.SomeValue;
someObject.SomeValue = "Updating, call again later";
    // do stuff
    someObject.SomeValue = temp;

I'm currently working in VB.NET, and it would seem like a dandy idea to be able to do something like the pattern below;
Imports System
Imports SubSystem
Public Class SomeLogger
    Public CategoryName As String = "None Specified"
    Public Sub DoLog(ByVal SomeText As String)
        Console.WriteLine("{0}:    {1}", CategoryName, SomeText)
    End Sub
End Class
Public Class Application
    Public Shared Logger As New SomeLogger
    Public Shared Sub Main()
        Logger.DoLog("Hello World")
        Using Temporary.Override(Logger, "CategoryName", "Sub Main")
            Logger.DoLog("Hello World")
        End Using
        Logger.DoLog("Hello World")
    End Sub
End Class

Well, that's possible. Temporary is a static class, returning an IDisposable that wraps the property on said object. When the computer leaves the Using statement, the IDisposable will reflect the original value back, even if we exit the procedure by throwing a new exception.

The actual implementation as a reference;
using System;
using System.Collections;
using System.Reflection;
using System.IO;
using System.ComponentModel;
namespace SubSystem
    public class Temporary
        public static IDisposable Override (Object aObject, String aMemberName, Object aScopedValue)
            return init (aMemberName, aObject.GetType (), aObject, aScopedValue);
        public static IDisposable Override (Type aType, String aMemberName, Object aScopedValue)
            return init (aMemberName, aType, null, aScopedValue);
        static IDisposable init (String aMemberName, Type aType, Object aObject, Object aScopedValue)
            MemberInfo memberInfo = aType.GetMember (aMemberName)[0];
            switch (memberInfo.MemberType) 
                case MemberTypes.Property:
                    return new TemporaryOverrideProperty (
                        aObject == null ? aType : aObject, 
                case MemberTypes.Field:
                    return new TemporaryOverrideField (
                        aObject == null ? aType : aObject, 
                    throw new NotSupportedException ();

    public class TemporaryOverrideProperty : TemporaryOverride
        PropertyInfo _overridenProperty;
        public TemporaryOverrideProperty(Object aObject, PropertyInfo aProperty, Object aScopedValue)
            this._sourceObject = aObject;
            this.init(aProperty, aScopedValue);
        public TemporaryOverrideProperty(Type aSource, PropertyInfo aProperty, Object aScopedValue)
            this._sourceClass = aSource;
            this.init(aProperty, aScopedValue);
        void init(PropertyInfo aProperty, Object aScopedValue)
            this._overridenProperty = aProperty;
            this._originalValue = this._overridenProperty.GetValue(this._sourceObject, null);
            this._overridenProperty.SetValue(this._sourceObject, aScopedValue, null);
        protected override void Dispose(Boolean disposing)
            if (disposing)
                this._overridenProperty.SetValue(this._sourceObject, this._originalValue, null);
    public class TemporaryOverrideField : TemporaryOverride
        FieldInfo _overridenField;
        public TemporaryOverrideField(Object aObject, FieldInfo aField, Object aScopedValue)
            this._sourceObject = aObject;
            this.init(aField, aScopedValue);
        public TemporaryOverrideField(Type aSource, FieldInfo aField, Object aScopedValue)
            this._sourceClass = aSource;
            this.init(aField, aScopedValue);
        void init(FieldInfo aField, Object aScopedValue)
            this._overridenField = aField;
            this._originalValue = this._overridenField.GetValue(this._sourceObject);
            this._overridenField.SetValue(this._sourceObject, aScopedValue);
        protected override void Dispose(Boolean disposing)
            if (disposing)
                this._overridenField.SetValue(this._sourceObject, this._originalValue);
    public class TemporaryOverride : IDisposable
        protected Object _sourceObject;
        protected Type _sourceClass;
        protected Object _originalValue;
        protected TemporaryOverride()
        #region IDisposable implementation (MSDN adapted version)
        Boolean disposed = false;
        public void Dispose()
        protected virtual void Dispose(Boolean disposing)
            if (!this.disposed)
                if (disposing)
                    // Dispose managed resources.
                // Call the appropriate methods to clean up
                // unmanaged resources here.
                // Note disposing has been done.
                this.disposed = true;

I are Troll Suspicious | :suss:

NewsTemporaryOverride class (VB.NET version) Pin
Eddy Vluggen22-Jul-11 4:30
memberEddy Vluggen22-Jul-11 4:30 
NewsScopedSupportInitialize Pin
Eddy Vluggen10-Apr-12 8:35
memberEddy Vluggen10-Apr-12 8:35 
GeneralA clean CreateDelegate Pin
Eddy Vluggen13-Apr-11 10:04
memberEddy Vluggen13-Apr-11 10:04 
NewsInterop with .NET, tested with Lazarus; Pin
Eddy Vluggen13-Sep-11 12:32
memberEddy Vluggen13-Sep-11 12:32 
NewsStandard reader-pattern Pin
Eddy Vluggen29-Oct-11 14:31
memberEddy Vluggen29-Oct-11 14:31 
NewsAttributionAttribute AboutBox Pin
Eddy Vluggen29-Oct-11 14:55
memberEddy Vluggen29-Oct-11 14:55 
NewsMy BigInt implementation Pin
Eddy Vluggen11-Nov-11 7:20
memberEddy Vluggen11-Nov-11 7:20 
NewsExpensive Exceptions Pin
Eddy Vluggen19-Sep-16 1:03
professionalEddy Vluggen19-Sep-16 1:03 
GeneralTSQL: Fetch metadata for a table Pin
Eddy Vluggen6-Sep-10 9:54
mvpEddy Vluggen6-Sep-10 9:54 
GeneralTSQL: Fetch tables without Primary Key Pin
Eddy Vluggen31-Jan-11 1:36
memberEddy Vluggen31-Jan-11 1:36 
GeneralTSQL: Fetch tables without clustered index Pin
Eddy Vluggen1-Feb-11 21:04
memberEddy Vluggen1-Feb-11 21:04 
GeneralVisual Studio macro's: replacing the default help-system Pin
Eddy Vluggen2-Sep-10 9:49
mvpEddy Vluggen2-Sep-10 9:49 
GeneralVisual Studio macro's: AsQuotedString() Pin
Eddy Vluggen7-Oct-10 13:13
mvpEddy Vluggen7-Oct-10 13:13 
NewsNo news :) Pin
Eddy Vluggen29-Apr-09 12:55
memberEddy Vluggen29-Apr-09 12:55 
GeneralRe: No news :) Pin
Rajesh R Subramanian12-Jan-10 1:55
mvpRajesh R Subramanian12-Jan-10 1:55 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Advertise | Privacy | Mobile
Web02 | 2.8.170624.1 | Last Updated 25 Jun 2017
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid