首页 新闻 会员 周边

各位说说在ASP.net里 用静态函数的好 还是实例函数出处HTML好???

1
悬赏园豆:100 [已关闭问题] 关闭于 2013-12-01 20:53

//在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/>");
    }

erlan80的主页 erlan80 | 初学一级 | 园豆:8
提问于:2011-06-25 18:28
< >
分享
所有回答(6)
0

就这个例子来看,HttpContext.Current.Response.Write() 这些方法都是静态的,所以没什么区别,用静态的还能省一条实例化的语句,性能当然高那么一点点点点。

然而静态和实例类的区别不仅如此。包括里面私有变量的区别,构造函数的区别等。

举个例子吧,比如你的两个类中,各有一个私有变量private int count; 和 private static int count;用来记录Response.Write()的条数,每执行一次就+1。你多刷新几次这个页面,看它们的值有何区别。

vons | 园豆:1033 (小虾三级) | 2011-06-25 23:22
0

静态方法往往放在工具类中.因为往往作为工具使用.

设计模式对楼主有利,看看吧.

迅捷网络[来送福利] | 园豆:578 (小虾三级) | 2011-06-26 08:37
用性能角度看呢??
支持(0) 反对(0) erlan80 | 园豆:8 (初学一级) | 2011-06-26 23:38
0

使用静态有时可以避免多处实例化,从这点上看可以是提供性能。

加百力 | 园豆:533 (小虾三级) | 2011-06-26 23:58
0

这个得看情况啊,两者肯定有不可替代的地方。例如一个表示人的一个类,这个类只包含人的属性,那么这个类当然就不能静态化,不然就没意义了。

性能上讲静态的会比实例化会快,因为不需要重新分配。

慧☆星 | 园豆:5640 (大侠五级) | 2011-06-27 08:59
性能上讲静态的会比实例化会快
能给个链接吗 说的是 在内存里的分配结构
支持(0) 反对(0) erlan80 | 园豆:8 (初学一级) | 2011-06-27 10:17
0

如果只是像你输出那种字符串什么的,不用想了静态方法吧。

因为你不需要考虑上下文不需要考虑各种构造逻辑。

但是如果你是要一些复杂的逻辑操作,向楼上说的请实例化吧。

today4king | 园豆:3499 (老鸟四级) | 2011-07-20 12:04
0

除了楼上各位说的以外,从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();

Saar | 园豆:205 (菜鸟二级) | 2011-07-22 23:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册