Click here to Skip to main content
14,742,951 members
Home » Discussions » C#
   

C#

 
GeneralRe: What kind of dll use ftp/sftp mapping drive? Pin
Dave Kreskowiak14-Oct-20 6:01
mveDave Kreskowiak14-Oct-20 6:01 
JokeRe: What kind of dll use ftp/sftp mapping drive? Pin
Randor 14-Oct-20 10:22
professional Randor 14-Oct-20 10:22 
Questionhow to insert unknown amount of data into a database Pin
steven_noppe11-Oct-20 8:41
Membersteven_noppe11-Oct-20 8:41 
AnswerRe: how to insert unknown amount of data into a database Pin
Luc Pattyn11-Oct-20 9:32
sitebuilderLuc Pattyn11-Oct-20 9:32 
AnswerRe: how to insert unknown amount of data into a database Pin
OriginalGriff11-Oct-20 9:33
mveOriginalGriff11-Oct-20 9:33 
AnswerRe: how to insert unknown amount of data into a database Pin
jsc4213-Oct-20 4:50
professionaljsc4213-Oct-20 4:50 
QuestionWhy am I not allowed to do this with events Pin
Keith Barrow9-Oct-20 2:20
professionalKeith Barrow9-Oct-20 2:20 
AnswerRe: Why am I not allowed to do this with events Pin
Richard Deeming9-Oct-20 3:12
mveRichard Deeming9-Oct-20 3:12 
The technical reason is fairly simple. When you declare an event:
public class Foo
{
    public event EventHandler Test;
}
the compiler actually generates two members:
public class Foo
{
    [CompilerGenerated]
    [DebuggerBrowsable(DebuggerBrowsableState.Never)]
    private EventHandler Test;
    
    public event EventHandler Test
    {
        [CompilerGenerated]
        add
        {
            EventHandler eventHandler = this.Test;
            EventHandler eventHandler2;
            do
            {
                eventHandler2 = eventHandler;
                EventHandler value2 = (EventHandler)Delegate.Combine(eventHandler2, value);
                eventHandler = Interlocked.CompareExchange(ref this.Test, value2, eventHandler2);
            }
            while ((object)eventHandler != eventHandler2);
        }
        [CompilerGenerated]
        remove
        {
            EventHandler eventHandler = this.Test;
            EventHandler eventHandler2;
            do
            {
                eventHandler2 = eventHandler;
                EventHandler value2 = (EventHandler)Delegate.Remove(eventHandler2, value);
                eventHandler = Interlocked.CompareExchange(ref this.Test, value2, eventHandler2);
            }
            while ((object)eventHandler != eventHandler2);
        }
    }
}
Inside the same type, you will either reference the private field (for assignment, Invoke, etc.) or the event (for adding and removing handlers). The compiler will decide which.

Outside of the class, you only have access to the event. All you can do is add or remove a handler.

I believe this is to prevent other classes from raising events without the cooperation of the base class, or swapping out the entire list of handlers. But obviously you'd need to ask the original language designers to know their reasoning.

Of course, the simple workaround is to provide a protected method in the base class which raises the event on demand.
protected void OnTest(EventArgs e)
{
    Test?.Invoke(this, e);
}




"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer

GeneralRe: Why am I not allowed to do this with events Pin
Keith Barrow9-Oct-20 4:19
professionalKeith Barrow9-Oct-20 4:19 
QuestionHow to read from serial port until timeout of no more data received? Pin
td17768-Oct-20 14:27
Membertd17768-Oct-20 14:27 
AnswerRe: How to read from serial port until timeout of no more data received? Pin
Luc Pattyn8-Oct-20 15:27
sitebuilderLuc Pattyn8-Oct-20 15:27 
GeneralRe: How to read from serial port until timeout of no more data received? Pin
td17768-Oct-20 16:36
Membertd17768-Oct-20 16:36 
GeneralRe: How to read from serial port until timeout of no more data received? Pin
Luc Pattyn9-Oct-20 2:25
sitebuilderLuc Pattyn9-Oct-20 2:25 
AnswerRe: How to read from serial port until timeout of no more data received? Pin
Gerry Schmitz8-Oct-20 19:27
mveGerry Schmitz8-Oct-20 19:27 
GeneralRe: How to read from serial port until timeout of no more data received? Pin
td17769-Oct-20 12:16
Membertd17769-Oct-20 12:16 
GeneralRe: How to read from serial port until timeout of no more data received? Pin
Gerry Schmitz9-Oct-20 15:10
mveGerry Schmitz9-Oct-20 15:10 
AnswerRe: How to read from serial port until timeout of no more data received? Pin
Richard MacCutchan8-Oct-20 23:55
mveRichard MacCutchan8-Oct-20 23:55 
AnswerMy (temporary?) solution Pin
td17769-Oct-20 12:25
Membertd17769-Oct-20 12:25 
QuestionCOM exception loss Pin
Member 126326017-Oct-20 21:57
MemberMember 126326017-Oct-20 21:57 
AnswerRe: COM exception loss Pin
Richard MacCutchan7-Oct-20 22:35
mveRichard MacCutchan7-Oct-20 22:35 
GeneralRe: COM exception loss Pin
Member 126326017-Oct-20 23:03
MemberMember 126326017-Oct-20 23:03 
GeneralRe: COM exception loss Pin
Richard MacCutchan7-Oct-20 23:25
mveRichard MacCutchan7-Oct-20 23:25 
GeneralRe: COM exception loss Pin
Member 126326017-Oct-20 23:58
MemberMember 126326017-Oct-20 23:58 
GeneralRe: COM exception loss Pin
Richard MacCutchan8-Oct-20 0:24
mveRichard MacCutchan8-Oct-20 0:24 
AnswerRe: COM exception loss Pin
OriginalGriff8-Oct-20 5:10
mveOriginalGriff8-Oct-20 5:10 

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.