首页 新闻 会员 周边

如何不实例化类来调用类中的非静态方法?

0
悬赏园豆:50 [已关闭问题]

有三个类:base,a,b

base类就是用户的基本信息,b类就是处理页面的公用方法,头、尾、提示信息什么的,a类就是每个页面自己的类,比如用户登录,新闻列表什么的。

a类和b类都继承base类,现在我想在a类里引用b类,能不能不实例化b类?因为每个页面都要调用b类的header()、footer()方法来生成html的头和尾,都要new一下感觉挺麻烦的。

以下是示例:

b.cs

public class pagectrl : pagebase
{
private string _pageTitle = ""; //不能使用静态字段

public string PageTitle
{
get { return _pageTitle; }
set { _pageTitle = value; }
}

public void Header() //需要引用_pageTitle变量,不能使用静态方法
{
HttpContext.Current.Response.Write(
"<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><title>" + (_pageTitle.Length > 0 ? _pageTitle + " - " : "") + "我的网站</title><link rel=\"stylesheet\" href=\"images/common/common.css\" /<script type=\"text/javascript\" src=\"js/common.js\"></script></head><body>");
}

public void Footer()
{
HttpContext.Current.Response.Write(
"</body></html>");
}
}


a.cs:

public partial class login : pagebase
{
protected internal pagectrl pc = new pagectrl();//每页都要实例化一次,太麻烦啦

protected void Page_Load(object sender, EventArgs e)
{
string action = fun.SafeRequest(3, "action", 0);
if (action == "login")
{
Login();
}
else if (action == "logout")
{
ClearCookies();
}

pc.PageTitle
= "登陆";
pc.Header();
pc.Footer();
}
}

 

 

如果网站功能比较复杂,例如再加个Cache缓存类、定时清理无效数据的Task类等等,那岂是不是每个页面都要new一下这些类,那该多麻烦啊。

rqrq的主页 rqrq | 初学一级 | 园豆:95
提问于:2010-04-15 17:06
< >
分享
其他回答(4)
0

当然不能啊

可以这样:

修改继承层次,将调用较多公用的方法放在父类

或者

使用current字段,如常用的httpcontext.current...

public a current

{

return new a();

}

LittlePeng | 园豆:3445 (老鸟四级) | 2010-04-15 19:30
0

实例化方法,必须由实例化对象调用,这是面向对象的根本原则

玄魂 | 园豆:15 (初学一级) | 2010-04-15 19:32
0

扩展方法

KAI168 | 园豆:41 (初学一级) | 2010-04-15 19:39
0

你可以将这些方法放在pagebase类中,login继承自pagebase,那么在login中就不要实例化类了,因为是父类中的方法,直接调用就可以了

上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2010-04-29 13:27
0

继承

Astar | 园豆:40805 (高人七级) | 2010-04-29 13:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册