在控制台应用程序中处理行为,自定义function等的基类?

我有一个像这样的控制台应用程序:

public enum TypeMessage : int { Log, Success, Warning, Alert } class Program { static void Main(string[] args) { //do stuff WriteMessage("Sucess .... etc", TypeMessage.Success); } static void WriteMessage(string message, TypeMessage typeMessage = TypeMessage.Log) { switch (typeMessage) { case TypeMessage.Success: Console.ForegroundColor = ConsoleColor.Green; break; case TypeMessage.Warning: Console.ForegroundColor = ConsoleColor.Yellow; break; case TypeMessage.Alert: Console.ForegroundColor = ConsoleColor.Red; break; default: Console.ResetColor(); break; } Console.WriteLine(message); Console.ResetColor(); } static void ExecuteAction(Action action) { try { action.Invoke(); } catch (Exception ex) { throw; } } /*....*/ } 

我想创建一个BaseProgram类class Program : BaseProgram并放置初始化设置,帮助方法等:

  • Console.Title = Title;
  • static void WriteMessage(string message,TypeMessage typeMessage = TypeMessage.Log)
  • static void ExecuteAction(Action action)

我尝试在BaseProgram类中使用静态构造函数并设置控制台标题但不起作用。

 static BaseProgram() { Console.Title = "Some Title"; } 

怎么做到这一点?

除非在应用程序入口点( Program.Main() )中调用/实例化BaseProgram或其衍生物,否则使用静态构造函数的当前实现将不起作用。

 class Program : BaseProgram { static void Main(string[] args) { new BaseProgram(); // or, new Program(); //do stuff WriteMessage("Sucess .... etc", TypeMessage.Success); } } 

话虽如此,你可以考虑像下面这样实现它,而不是在BaseProgram上使用静态构造函数:

 public abstract class BaseProgram { protected BaseProgram() { Console.Title = "Some Title"; // other common initialization } public abstract void Run(string[] args); public void WriteMessage(string message, TypeMessage typeMessage = TypeMessage.Log) { ... } // other methods } public class Program : BaseProgram { public static void Main(string[] args) { var program = new Program(); program.Run(args); } public override void Run(string[] args) { //do stuff WriteMessage("Sucess .... etc", TypeMessage.Success); } } 

Title是字符串字段吗? 将它变成属性可能是一个更好的主意,这样每次设置它都会立即更新。

另外我认为默认的Program类是C#不是静态类,所以我真的不明白你为什么要为你的BaseProgram类创建一个静态构造函数。 Main可以访问您创建的Program的任何静态组件(假设给出了适当的访问修饰符)。

祝你好运,我希望我能够帮助你!