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