diff --git a/csharp/delegates-and-events/FileLogger.cs b/csharp/delegates-and-events/FileLogger.cs
index 42fdbece740..54cce5e51bf 100644
--- a/csharp/delegates-and-events/FileLogger.cs
+++ b/csharp/delegates-and-events/FileLogger.cs
@@ -1,40 +1,34 @@
-using System;
-using System.IO;
+namespace DelegatesAndEvents;
-namespace DelegatesAndEvents
+public class FileLogger
{
- //
- public class FileLogger
+ private readonly string _logPath;
+ public FileLogger(string path)
{
- private readonly string logPath;
- public FileLogger(string path)
- {
- logPath = path;
- Logger.WriteMessage += LogMessage;
- }
+ _logPath = path;
+ Logger.WriteMessage += LogMessage;
+ }
- public void DetachLog() => Logger.WriteMessage -= LogMessage;
- // make sure this can't throw.
- private void LogMessage(string msg)
+ public void DetachLog() => Logger.WriteMessage -= LogMessage;
+ // make sure this can't throw.
+ private void LogMessage(string msg)
+ {
+ try
{
- try
+ using (var log = File.AppendText(_logPath))
{
- using (var log = File.AppendText(logPath))
- {
- log.WriteLine(msg);
- log.Flush();
- }
- }
- catch (Exception)
- {
- // Hmm. We caught an exception while
- // logging. We can't really log the
- // problem (since it's the log that's failing).
- // So, while normally, catching an exception
- // and doing nothing isn't wise, it's really the
- // only reasonable option here.
+ log.WriteLine(msg);
+ log.Flush();
}
}
+ catch (Exception)
+ {
+ // Hmm. We caught an exception while
+ // logging. We can't really log the
+ // problem (since it's the log that's failing).
+ // So, while normally, catching an exception
+ // and doing nothing isn't wise, it's really the
+ // only reasonable option here.
+ }
}
- //
}
diff --git a/csharp/delegates-and-events/Logger.cs b/csharp/delegates-and-events/Logger.cs
index 56c718b687d..5873b61fd9b 100644
--- a/csharp/delegates-and-events/Logger.cs
+++ b/csharp/delegates-and-events/Logger.cs
@@ -1,69 +1,27 @@
-using System;
+namespace DelegatesAndEvents;
-namespace DelegatesAndEvents
+public enum Severity
{
-
- // Logger implementation two
- //
- public enum Severity
- {
- Verbose,
- Trace,
- Information,
- Warning,
- Error,
- Critical
- }
- //
-
- //
- public static class Logger
- {
- public static Action WriteMessage;
-
- public static Severity LogLevel { get; set; } = Severity.Warning;
-
- public static void LogMessage(Severity s, string component, string msg)
- {
- if (s < LogLevel)
- return;
-
- var outputMsg = $"{DateTime.Now}\t{s}\t{component}\t{msg}";
- WriteMessage(outputMsg);
- }
- }
- //
+ Verbose,
+ Trace,
+ Information,
+ Warning,
+ Error,
+ Critical
}
-namespace ImplementationOne
+public static class Logger
{
- //
- public static class Logger
- {
- public static Action WriteMessage;
+ public static Action? WriteMessage;
- public static void LogMessage(string msg)
- {
- WriteMessage(msg);
- }
- }
- //
-}
-
-namespace ImplementationTwo
-{
- using DelegatesAndEvents;
+ public static Severity LogLevel { get; set; } = Severity.Warning;
- //
- public static class Logger
+ public static void LogMessage(Severity s, string component, string msg)
{
- public static Action WriteMessage;
+ if ((s < LogLevel) || (WriteMessage is null))
+ return;
- public static void LogMessage(Severity s, string component, string msg)
- {
- var outputMsg = $"{DateTime.Now}\t{s}\t{component}\t{msg}";
- WriteMessage(outputMsg);
- }
+ var outputMsg = $"{DateTime.Now}\t{s}\t{component}\t{msg}";
+ WriteMessage(outputMsg);
}
- //
}
diff --git a/csharp/delegates-and-events/Program.cs b/csharp/delegates-and-events/Program.cs
index 1747abf2e9a..78acda6a992 100644
--- a/csharp/delegates-and-events/Program.cs
+++ b/csharp/delegates-and-events/Program.cs
@@ -1,24 +1,11 @@
-using System;
+using DelegatesAndEvents;
-namespace DelegatesAndEvents
-{
- public class Program
- {
- public static void Main(string[] args)
- {
- //
- Logger.WriteMessage += LoggingMethods.LogToConsole;
- //
- //
- var file = new FileLogger("log.txt");
- //
+Logger.WriteMessage += LoggingMethods.LogToConsole;
+var file = new FileLogger("log.txt");
- Logger.LogMessage(Severity.Warning, "Console", "This is a warning message");
+Logger.LogMessage(Severity.Warning, "Console", "This is a warning message");
- Logger.LogMessage(Severity.Information, "Console", "Information message one");
- Logger.LogLevel = Severity.Information;
+Logger.LogMessage(Severity.Information, "Console", "Information message one");
+Logger.LogLevel = Severity.Information;
- Logger.LogMessage(Severity.Information, "Console", "Information message two");
- }
- }
-}
+Logger.LogMessage(Severity.Information, "Console", "Information message two");
diff --git a/csharp/delegates-and-events/delegates-and-events.csproj b/csharp/delegates-and-events/delegates-and-events.csproj
index 299d1386b17..16829f3e536 100644
--- a/csharp/delegates-and-events/delegates-and-events.csproj
+++ b/csharp/delegates-and-events/delegates-and-events.csproj
@@ -1,8 +1,10 @@
-
+
- net7.0
+ net9.0
Exe
+ enable
+ enable
diff --git a/csharp/events/Program.cs b/csharp/events/Program.cs
index c2f07f0c5bb..10e17c43697 100644
--- a/csharp/events/Program.cs
+++ b/csharp/events/Program.cs
@@ -1,155 +1,87 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
+var fileLister = new FileSearcher();
+int filesFound = 0;
-namespace EventSampleCode
+EventHandler onFileFound = (sender, eventArgs) =>
{
- class Program
- {
- static void Main(string[] args)
- {
- var fileLister = new FileSearcher();
- int filesFound = 0;
+ Console.WriteLine(eventArgs.FoundFile);
+ filesFound++;
+};
- //
- EventHandler onFileFound = (sender, eventArgs) =>
- {
- Console.WriteLine(eventArgs.FoundFile);
- filesFound++;
- };
+fileLister.FileFound += onFileFound;
- fileLister.FileFound += onFileFound;
- //
+fileLister.DirectoryChanged += (sender, eventArgs) =>
+{
+ Console.Write($"Entering '{eventArgs.CurrentSearchDirectory}'.");
+ Console.WriteLine($" {eventArgs.CompletedDirs} of {eventArgs.TotalDirs} completed...");
+};
- //
- fileLister.DirectoryChanged += (sender, eventArgs) =>
- {
- Console.Write($"Entering '{eventArgs.CurrentSearchDirectory}'.");
- Console.WriteLine($" {eventArgs.CompletedDirs} of {eventArgs.TotalDirs} completed...");
- };
- //
+fileLister.Search(".", "*.dll", true);
- fileLister.Search(".", "*.dll", true);
+fileLister.FileFound -= onFileFound;
- //
- fileLister.FileFound -= onFileFound;
- //
- }
- }
+public class FileFoundArgs : EventArgs
+{
+ public string FoundFile { get; }
+ public bool CancelRequested { get; set; }
- //
- public class FileFoundArgs : EventArgs
- {
- public string FoundFile { get; }
- public bool CancelRequested { get; set; }
+ public FileFoundArgs(string fileName) => FoundFile = fileName;
+}
- public FileFoundArgs(string fileName)
- {
- FoundFile = fileName;
- }
- }
- //
+internal class SearchDirectoryArgs : EventArgs
+{
+ internal string CurrentSearchDirectory { get; }
+ internal int TotalDirs { get; }
+ internal int CompletedDirs { get; }
- //
- internal class SearchDirectoryArgs : EventArgs
+ internal SearchDirectoryArgs(string dir, int totalDirs, int completedDirs)
{
- internal string CurrentSearchDirectory { get; }
- internal int TotalDirs { get; }
- internal int CompletedDirs { get; }
-
- internal SearchDirectoryArgs(string dir, int totalDirs, int completedDirs)
- {
- CurrentSearchDirectory = dir;
- TotalDirs = totalDirs;
- CompletedDirs = completedDirs;
- }
+ CurrentSearchDirectory = dir;
+ TotalDirs = totalDirs;
+ CompletedDirs = completedDirs;
}
- //
+}
- public class FileSearcher
+public class FileSearcher
+{
+ public event EventHandler? FileFound;
+ internal event EventHandler? DirectoryChanged
{
- //
- public event EventHandler FileFound;
- //
- //
- internal event EventHandler DirectoryChanged
- {
- add { directoryChanged += value; }
- remove { directoryChanged -= value; }
- }
- private EventHandler directoryChanged;
- //
+ add => directoryChanged += value;
+ remove => directoryChanged -= value;
+ }
+ private EventHandler? directoryChanged;
- //
- public void Search(string directory, string searchPattern, bool searchSubDirs = false)
+ public void Search(string directory, string searchPattern, bool searchSubDirs = false)
+ {
+ if (searchSubDirs)
{
- if (searchSubDirs)
- {
- var allDirectories = Directory.GetDirectories(directory, "*.*", SearchOption.AllDirectories);
- var completedDirs = 0;
- var totalDirs = allDirectories.Length + 1;
- foreach (var dir in allDirectories)
- {
- directoryChanged?.Invoke(this,
- new SearchDirectoryArgs(dir, totalDirs, completedDirs++));
- // Search 'dir' and its subdirectories for files that match the search pattern:
- SearchDirectory(dir, searchPattern);
- }
- // Include the Current Directory:
- directoryChanged?.Invoke(this,
- new SearchDirectoryArgs(directory, totalDirs, completedDirs++));
- SearchDirectory(directory, searchPattern);
- }
- else
+ var allDirectories = Directory.GetDirectories(directory, "*.*", SearchOption.AllDirectories);
+ var completedDirs = 0;
+ var totalDirs = allDirectories.Length + 1;
+ foreach (var dir in allDirectories)
{
- SearchDirectory(directory, searchPattern);
+ directoryChanged?.Invoke(this, new (dir, totalDirs, completedDirs++));
+ // Search 'dir' and its subdirectories for files that match the search pattern:
+ SearchDirectory(dir, searchPattern);
}
+ // Include the Current Directory:
+ directoryChanged?.Invoke(this, new (directory, totalDirs, completedDirs++));
+ SearchDirectory(directory, searchPattern);
}
-
- private void SearchDirectory(string directory, string searchPattern)
+ else
{
- foreach (var file in Directory.EnumerateFiles(directory, searchPattern))
- {
- var args = new FileFoundArgs(file);
- FileFound?.Invoke(this, args);
- if (args.CancelRequested)
- break;
- }
+ SearchDirectory(directory, searchPattern);
}
- //
}
-}
-namespace VersionOne
-{
- //
- public class FileFoundArgs : EventArgs
+ private void SearchDirectory(string directory, string searchPattern)
{
- public string FoundFile { get; }
-
- public FileFoundArgs(string fileName)
+ foreach (var file in Directory.EnumerateFiles(directory, searchPattern))
{
- FoundFile = fileName;
- }
- }
- //
-
- //
- public class FileSearcher
- {
- public event EventHandler FileFound;
-
- public void Search(string directory, string searchPattern)
- {
- foreach (var file in Directory.EnumerateFiles(directory, searchPattern))
- {
- FileFound?.Invoke(this, new FileFoundArgs(file));
- }
+ var args = new FileFoundArgs(file);
+ FileFound?.Invoke(this, args);
+ if (args.CancelRequested)
+ break;
}
}
- //
}
diff --git a/csharp/events/VersionOne.cs b/csharp/events/VersionOne.cs
new file mode 100644
index 00000000000..f9959043b2a
--- /dev/null
+++ b/csharp/events/VersionOne.cs
@@ -0,0 +1,21 @@
+namespace Events;
+
+public class FileFoundArgs : EventArgs
+{
+ public string FoundFile { get; }
+
+ public FileFoundArgs(string fileName) => FoundFile = fileName;
+}
+
+public class FileSearcher
+{
+ public event EventHandler? FileFound;
+
+ public void Search(string directory, string searchPattern)
+ {
+ foreach (var file in Directory.EnumerateFiles(directory, searchPattern))
+ {
+ FileFound?.Invoke(this, new FileFoundArgs(file));
+ }
+ }
+}
diff --git a/csharp/events/events.csproj b/csharp/events/events.csproj
index 299d1386b17..16829f3e536 100644
--- a/csharp/events/events.csproj
+++ b/csharp/events/events.csproj
@@ -1,8 +1,10 @@
-
+
- net7.0
+ net9.0
Exe
+ enable
+ enable