我有一个像这样的控制台应用程序:
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
并放置初始化设置,帮助方法等:
我尝试使用BaseProgram类中的静态构造函数并设置控制台标题但不起作用。
static BaseProgram()
{
Console.Title = "Some Title";
}
如何实现这一目标?
答案 0 :(得分:1)
使用静态构造函数的当前实现将不起作用,除非您在应用程序入口点(BaseProgram
)中调用/实例化Program.Main()
或其衍生物。
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);
}
}
答案 1 :(得分:0)
标题是字符串字段吗?将它变成属性可能是一个更好的主意,这样每次设置它都会立即更新。
另外我认为默认的Program类是C#不是静态类,所以我真的不明白为什么要为BaseProgram类创建一个静态构造函数。 Main可以访问您创建的Program的任何静态组件(假设给出了适当的访问修饰符)。
祝你好运,我希望我能够帮助你!