Skip to content

Commit f41e82c

Browse files
mwiemer-microsoftBillWagnerCopilot
authored
Change headings to sentence case (dotnet#54468)
* Change heading to sentence case Matches Microsoft style guide and other articles in this section. * Make all headings sentence case Co-authored-by: Mark Wiemer (MSFT) <80539004+mwiemer-microsoft@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Bill Wagner <wiwagn@microsoft.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
1 parent d66dce4 commit f41e82c

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

docs/csharp/distinguish-delegates-events.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Learn the difference between delegates and events and when to use e
44
ms.date: 03/11/2025
55
ms.subservice: fundamentals
66
---
7-
# Distinguishing Delegates and Events
7+
# Delegates vs. events
88

99
[Previous](modern-events.md)
1010

@@ -14,30 +14,30 @@ Both offer a late binding scenario: they enable scenarios where a component comm
1414

1515
With all those similarities, it's easy to have trouble determining when to use which.
1616

17-
## Listening to Events is Optional
17+
## Listening to events is optional
1818

1919
The most important consideration in determining which language feature to use is whether or not there must be an attached subscriber. If your code must call the code supplied by the subscriber, you should use a design based on delegates when you need to implement callback. If your code can complete all its work without calling any subscribers, you should use a design based on events.
2020

2121
Consider the examples built during this section. The code you built using `List.Sort()` must be given a comparer function in order to properly sort the elements. LINQ queries must be supplied with delegates in order to determine what elements to return. Both used a design built with delegates.
2222

2323
Consider the `Progress` event. It reports progress on a task. The task continues to proceed whether or not there are any listeners. The `FileSearcher` is another example. It would still search and find all the files that were sought, even with no event subscribers attached. UX controls still work correctly, even when there are no subscribers listening to the events. They both use designs based on events.
2424

25-
## Return Values Require Delegates
25+
## Return values require delegates
2626

2727
Another consideration is the method prototype you would want for your delegate method. As you saw, the delegates used for events all have a void return type. There are idioms to create event handlers that do pass information back to event sources through modifying properties of the event argument object. While these idioms do work, they aren't as natural as returning a value from a method.
2828

2929
Notice that these two heuristics can often both be present: If your delegate method returns a value, it affects the algorithm in some way.
3030

31-
## Events Have Private Invocation
31+
## Events have private invocation
3232

3333
Classes other than the one in which an event is contained can only add and remove event listeners; only the class containing the event can invoke the event. Events are typically public class members. By comparison, delegates are often passed as parameters and stored as private class members, if they're stored at all.
3434

35-
## Event Listeners Often Have Longer Lifetimes
35+
## Event listeners often have longer lifetimes
3636

3737
The longer lifetime of event listeners is a slightly weaker justification. However, you might find that event-based designs are more natural when the event source is raising events over a long period of time. You can see examples of event-based design for UX controls on many systems. Once you subscribe to an event, the event source can raise events throughout the lifetime of the program. (You can unsubscribe from events when you no longer need them.)
3838

3939
Contrast that with many delegate-based designs, where a delegate is used as an argument to a method, and the delegate isn't used after that method returns.
4040

41-
## Evaluate Carefully
41+
## Evaluate carefully
4242

4343
The above considerations aren't hard and fast rules. Instead, they represent guidance that can help you decide which choice is best for your particular usage. Because they're similar, you can even prototype both, and consider which would be more natural to work with. They both handle late binding scenarios well. Use the one that communicates your design the best.

0 commit comments

Comments
 (0)