//在aspx的代码段
public partial class _Default : System.Web.UI.Page
{
private ExamplefunctionClass m_new;
protected void Page_Load(object sender, EventArgs e)
{
//在 ExamplefunctionClass类里实现了HTML出处函数
// A段 用实例函数
m_new = new ExamplefunctionClass();
m_new.ShowHtml1("调用实例函数 1");
m_new.ShowHtml2("调用实例函数 2",123);
//.
m_new.ShowHtml12("调用实例函数 12");
m_new.ShowHtml1("调用实例函数 1");
m_new.ShowHtml2("调用实例函数 2", 123);
//.
m_new.ShowHtml12("调用实例函数 12");
// B段 用静态函数
//在 StaticfunctionClass类里实现了HTML出处函数都是静态函数
StaticfunctionClass.ShowHtml1("调用实例函数 1");
StaticfunctionClass.ShowHtml2("调用实例函数 2", 123);
//.
//.
StaticfunctionClass.ShowHtml12("调用实例函数 12");
StaticfunctionClass.ShowHtml1("调用实例函数 1");
StaticfunctionClass.ShowHtml2("调用实例函数 2", 123);
//.
//.
StaticfunctionClass.ShowHtml12("调用实例函数 12");
}
}
用那个代码段的(A段代码 还是 B段代码)性能最好 ? 为什么??
ExamplefunctionClass类
//比如 实例函数 ShowHtml1 ShowHtml2 ShowHtml3 ..............ShowHtml4
public void ShowHtml1(string text)
{
HttpContext.Current.Response.Write("<br/>");
HttpContext.Current.Response.Write("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<br/>");
HttpContext.Current.Response.Write("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<br/>");
}
StaticfunctionClass类里实现了HTML出处函数都是静态函数
//比如 静态函数 ShowHtml1 ShowHtml2 ShowHtml3 ..............ShowHtml4
public static void ShowHtml1(string text)
{
HttpContext.Current.Response.Write("<br/>");
HttpContext.Current.Response.Write("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<br/>");
HttpContext.Current.Response.Write("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<br/>");
}
就这个例子来看,HttpContext.Current.Response.Write() 这些方法都是静态的,所以没什么区别,用静态的还能省一条实例化的语句,性能当然高那么一点点点点。
然而静态和实例类的区别不仅如此。包括里面私有变量的区别,构造函数的区别等。
举个例子吧,比如你的两个类中,各有一个私有变量private int count; 和 private static int count;用来记录Response.Write()的条数,每执行一次就+1。你多刷新几次这个页面,看它们的值有何区别。
静态方法往往放在工具类中.因为往往作为工具使用.
设计模式对楼主有利,看看吧.
使用静态有时可以避免多处实例化,从这点上看可以是提供性能。
这个得看情况啊,两者肯定有不可替代的地方。例如一个表示人的一个类,这个类只包含人的属性,那么这个类当然就不能静态化,不然就没意义了。
性能上讲静态的会比实例化会快,因为不需要重新分配。
如果只是像你输出那种字符串什么的,不用想了静态方法吧。
因为你不需要考虑上下文不需要考虑各种构造逻辑。
但是如果你是要一些复杂的逻辑操作,向楼上说的请实例化吧。
除了楼上各位说的以外,从OO角度来考虑的话,考虑类是不是有可能被继承,方法是否可能被重写。留个实例类会比较容易扩展。
===============================
举个例子,考虑这样一些类:
class Test1
{
string virtual void M1();
string M2();
}
class HTMLOutput
{
Test1 FunctionClass {get; set;}
void ShowHTML()
{
FunctionClass.M1();
...
FunctionClass.M2();
}
}
client调用时代码:
var htmlOutput = new HTMLOutput() { FunctionClass = new Test1() };
htmlOutput.ShowHTML();
如果哪一天M1输出的东西因为一些业务逻辑的原因,发生了变化,就可以另写一个Test2类,继承自Test1类,重写M1方法并更新一下client代码(如果有相应的IoC的话,client应该就不用这个改动了):
var htmlOutput = new HTMLOutput() { FunctionClass = new Test2() };
htmlOutput.ShowHTML();