我们有一个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
上述情景中的几个问题
如果你能写一点点描述,那将非常有帮助。
答案 0 :(得分:1)
•两个方法都返回数据表或静态的新实例将始终返回相同的内容吗?
是的,他们将返回一个新实例。
•在繁重负载(许多请求)的情况下,是否会出现任何线程相关的问题?
否,除非您在方法中使用共享状态。目前他们没有,但他们可能。甚至实例方法也可以使用共享状态。这与静态无关(静态?)
•如果没有比其他副作用更好的副作用?为什么呢?
这并不重要,但我会选择方法。在某些时候,您可能希望添加测试,并且可以在界面中提取方法并模拟对象。
奖励点: DataTables很糟糕!避免使用它们并使用类/对象。
答案 1 :(得分:1)
我个人会让你的所有页面都成为这个baseWebPage的子类
您可以安全地访问所有方法,而无需实例化BaseWebPage类甚至输入名称(进入静态时)。
代码就像这样:
您的所有网页(假设您使用的是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的多个不同实例。
如果有意,您也可以每次都返回相同的实例。这取决于您使用的代码和资源。