我们有一个Basewebpage类,它具有许多常见的功能,如填充下拉列表、格式化、返回格式化的数据表等等。
什么才是好办法。
Public Class BaseWebPage
{
...
public static DataTable Static_GetPersonDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Age");
return dt;
}
...
public DataTable NonStatic_GetPersonDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Age");
return dt;
}
}这两种方法都可以称为
DataTable dt1 = BaseWebPage.Static_GetPersonDataTable(); // calling static method
...
BaseWebPage pageBase = new BaseWebPage();
DataTable dt2 = pageBase.NonStatic_GetPersonDataTable(); // calling non-static method上述情况下的几个问题
如果你能写一些描述性的文章,这将是非常有帮助的。
发布于 2012-08-22 07:12:20
·这两种方法都会返回datatable的新实例吗?还是静态方法总是返回相同的实例?
是的,他们将返回一个新实例。
·在重载(许多请求)情况下,是否存在与线程相关的问题?
除非在方法中使用共享状态,否则为否。目前他们没有,但他们可能。甚至实例方法也可以使用共享状态。这与静态无关(统计学?)
如果没有比其他副作用更好的副作用?为什么?
这并不重要,但我会去,例如方法。在某个时候,您可能想要添加测试,并且可以在接口中提取方法并模拟对象。
加分: DataTables烂!避免使用类/对象。
发布于 2012-08-22 07:32:56
就我个人而言,我会让您所有的页面都成为这个baseWebPage的子类。
您可以安全地访问所有方法,而不必实例化BaseWebPage类,甚至无需键入名称(在静态时)。
代码是这样的:
所有的web页面(假设您使用的是webforms而不是mvc):
public partial class Index : BaseWebPage{
protected void Page_Load(object sender, EventArgs e){
var data = GetPersonDataTable();
}
}你的baseWebPage:
Public Class BaseWebPage : System.Web.UI.Page{
protected DataTable GetPersonDataTable(){
//Do your thing
}
}关于安全性和行为:这取决于您如何在这些方法中编写代码。
但是,在静态和非静态中,您可以安全地让多线程返回DataTable的多个不同实例。
但是,如果有意的话,您也可以每次返回相同的实例。这将取决于您正在使用的代码和资源。
https://stackoverflow.com/questions/12067928
复制相似问题