【发布时间】:2015-07-08 20:19:19
【问题描述】:
我开始学习使用 C# 进行 OOP 编程。
关于设计,对我来说,对我的程序的主类使用static 构造函数是有意义的,考虑到这个类包含只能运行一次的代码(我的整个程序非常简单,只包含一个 .cs 文件)。
例如,下面是一个使用普通构造函数的示例代码:
class Program
{
const string file = @"C:\Program Files (x86)\myapp\log.txt";
int status;
static int Main(string[] args)
{
var myObj = new Program();
return myObj.status;
}
public Program()
{
int retCode;
try {
// lots of procedures using the file
retCode = 0; // ok
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
retCode = 999; // specific error
}
status = retCode;
}
}
这里遵循相同的结构,但使用static 构造函数,因为我认为它已经足够了。注意status 的访问权限也已更改。
class Program
{
const string file = @"C:\Program Files (x86)\myapp\log.txt";
static int status;
static int Main(string[] args)
{
return Program.status;
}
static Program()
{
int retCode;
try {
// lots of procedures using the file
retCode = 0;
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
retCode = 999;
}
status = retCode;
}
}
问题:我的假设是否正确,即使用第二个代码而不是第一个代码?还是我错过了什么?
换句话说:哪一个更可取(被认为是更好的设计)?在这种情况下,静态构造函数是否有一些基本的东西会给我带来麻烦?
【问题讨论】:
-
调用代码是什么样子的?
-
@Legends 我猜这是这里程序的入口点;)
-
可能没有直接关系,而是有一个带有程序入口点
Main和代码的类,有两个单独的类,一个带有入口点(程序) 另一个与您的业务逻辑有关。稍后您可以决定将该类设为静态还是非静态。 -
您认为与在
Main中而不是构造函数中使用相同的代码相比,这使您获得了什么? -
第一种方式不好,因为 Program 类和 Main 函数交互的方式不寻常。第二种方法更糟糕,因为它不必要地依赖于 CLR 在执行的某个点自动进行的函数调用,而不是在代码中进行实际可见的调用,这更清晰,这在这个程序中是完全没有必要的。
标签: c# oop constructor static-constructor