From 7fec821e36310bb31de6e1fde342ae5e5d96bd24 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Tue, 13 May 2025 13:50:34 -0700 Subject: [PATCH 1/4] Add 'allows ref struct' to 'EventHandler' --- .../System.Private.CoreLib/src/System/EventHandler.cs | 3 ++- src/libraries/System.Runtime/ref/System.Runtime.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs b/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs index dba4aad09e45c8..dd827bdf120965 100644 --- a/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs +++ b/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs @@ -5,5 +5,6 @@ namespace System { public delegate void EventHandler(object? sender, EventArgs e); - public delegate void EventHandler(object? sender, TEventArgs e); // Removed TEventArgs constraint post-.NET 4 + public delegate void EventHandler(object? sender, TEventArgs e) // Removed TEventArgs constraint post-.NET 4 + where TEventArgs : allows ref struct; } diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs index 84742f4e9a03fe..a0dbfc53948d7c 100644 --- a/src/libraries/System.Runtime/ref/System.Runtime.cs +++ b/src/libraries/System.Runtime/ref/System.Runtime.cs @@ -2789,7 +2789,7 @@ public partial class EventArgs public EventArgs() { } } public delegate void EventHandler(object? sender, System.EventArgs e); - public delegate void EventHandler(object? sender, TEventArgs e); + public delegate void EventHandler(object? sender, TEventArgs e) where TEventArgs : allows ref struct; public partial class Exception : System.Runtime.Serialization.ISerializable { public Exception() { } From 575429985ec2b415824869522ddae42e9bbd0b70 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Tue, 13 May 2025 13:51:18 -0700 Subject: [PATCH 2/4] Add 'EventHandler<,>' --- .../System.Private.CoreLib/src/System/EventHandler.cs | 4 ++++ src/libraries/System.Runtime/ref/System.Runtime.cs | 1 + 2 files changed, 5 insertions(+) diff --git a/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs b/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs index dd827bdf120965..94dc0ab570b98d 100644 --- a/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs +++ b/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs @@ -7,4 +7,8 @@ namespace System public delegate void EventHandler(object? sender, TEventArgs e) // Removed TEventArgs constraint post-.NET 4 where TEventArgs : allows ref struct; + + public delegate void EventHandler(TSender sender, TEventArgs e) + where TSender : allows ref struct + where TEventArgs : allows ref struct; } diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs index a0dbfc53948d7c..7aaedc32aff6b1 100644 --- a/src/libraries/System.Runtime/ref/System.Runtime.cs +++ b/src/libraries/System.Runtime/ref/System.Runtime.cs @@ -2790,6 +2790,7 @@ public EventArgs() { } } public delegate void EventHandler(object? sender, System.EventArgs e); public delegate void EventHandler(object? sender, TEventArgs e) where TEventArgs : allows ref struct; + public delegate void EventHandler(TSender sender, TEventArgs e) where TSender : allows ref struct where TEventArgs : allows ref struct; public partial class Exception : System.Runtime.Serialization.ISerializable { public Exception() { } From 6778b4436c404bac6ec7fe9fbc27beb1c5e9256a Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Tue, 13 May 2025 13:53:02 -0700 Subject: [PATCH 3/4] Make 'TEventArgs' contravariant --- src/libraries/System.Private.CoreLib/src/System/EventHandler.cs | 2 +- src/libraries/System.Runtime/ref/System.Runtime.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs b/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs index 94dc0ab570b98d..5c3cbadec04876 100644 --- a/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs +++ b/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs @@ -5,7 +5,7 @@ namespace System { public delegate void EventHandler(object? sender, EventArgs e); - public delegate void EventHandler(object? sender, TEventArgs e) // Removed TEventArgs constraint post-.NET 4 + public delegate void EventHandler(object? sender, TEventArgs e) // Removed TEventArgs constraint post-.NET 4 where TEventArgs : allows ref struct; public delegate void EventHandler(TSender sender, TEventArgs e) diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs index 7aaedc32aff6b1..7e6c6bf7992dd7 100644 --- a/src/libraries/System.Runtime/ref/System.Runtime.cs +++ b/src/libraries/System.Runtime/ref/System.Runtime.cs @@ -2789,7 +2789,7 @@ public partial class EventArgs public EventArgs() { } } public delegate void EventHandler(object? sender, System.EventArgs e); - public delegate void EventHandler(object? sender, TEventArgs e) where TEventArgs : allows ref struct; + public delegate void EventHandler(object? sender, TEventArgs e) where TEventArgs : allows ref struct; public delegate void EventHandler(TSender sender, TEventArgs e) where TSender : allows ref struct where TEventArgs : allows ref struct; public partial class Exception : System.Runtime.Serialization.ISerializable { From 50ce58f1221a0b5523748604da2270b54fcb4bff Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Tue, 13 May 2025 14:50:22 -0700 Subject: [PATCH 4/4] Add XML docs --- .../System.Private.CoreLib/src/System/EventHandler.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs b/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs index 5c3cbadec04876..35572083cffc64 100644 --- a/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs +++ b/src/libraries/System.Private.CoreLib/src/System/EventHandler.cs @@ -8,6 +8,13 @@ namespace System public delegate void EventHandler(object? sender, TEventArgs e) // Removed TEventArgs constraint post-.NET 4 where TEventArgs : allows ref struct; + /// + /// Represents the method that will handle an event when the event provides data. + /// + /// The type of the object raising the event. + /// The type of the event data generated by the event. + /// The source of the event. + /// An object that contains the event data. public delegate void EventHandler(TSender sender, TEventArgs e) where TSender : allows ref struct where TEventArgs : allows ref struct;