在控制台应用程序中处理行为,自定义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的任何静态组件(假设给出了适当的访问修饰符)。
祝你好运,我希望我能够帮助你!
- 设置JsonConvert.DefaultSettings asp net core 2.0不能按预期工作
- 使用JsonConverter进行Json.NET自定义序列化 – 如何获取“默认”行为
- 始终在播放器前显示对象
- 将子对象转换为父对象
- 如何在“sub”表达式中使用lambda表达式参数?
- 什么消耗更少的资源,并且更快地存储在StringBuilder中的File.AppendText或File.WriteAllText?
- 如何将xaml中的值绑定到validation规则?
- 使用来自EWS或REST API的office365 JS API访问CustomProperties
- C#P \调用DLL没有进入C ++的入口点?