C# using 語句的妙用
阿新 • • 發佈:2019-01-07
Common Lisp 中有一種“with-”語句風格,它們可以以方便的方式做 try ... finally 的工作,常用於確保檔案、資料庫連線正確關閉。
雖然在 C# 中我們可以使用 try ... finally 語句做相同的事,但有時做起來會很冗長,不方便。
另一方面 C++ 中的 RAII 確實是個非常合適的替代方式。
由此想到了使用 C# 中的 using 語句來模擬這種風格,示例程式碼見“cs-with”,其實很簡單,一學就會。
注意,儘管原理很簡單,但由此帶來的程式碼簡化卻是很明顯的,使用這種“偽with”語句比直接的多個賦值語句要簡潔得多。
using System; namespace CSharpWith { public struct WithColor : IDisposable { // Fields private ConsoleColor color; // Methods public WithColor(ConsoleColor color) { this.color = Console.ForegroundColor; Console.ForegroundColor = color; } void IDisposable.Dispose() { Console.ForegroundColor = color; } } public static class Input { public static string ReadLine() { using (new WithColor(ConsoleColor.Cyan)) Console.Write(">>> "); using (new WithColor(ConsoleColor.Green)) return Console.ReadLine(); } } public static class Output { public static void WriteLine(string format, params object[] arg) { using (new WithColor(ConsoleColor.White)) Console.WriteLine(format, arg); } } class Program { static void Main() { while (true) { string line = Input.ReadLine(); if (line == null) break; if (!string.IsNullOrWhiteSpace(line)) Output.WriteLine("{0}", line); } } } }