为什么子类无法使用父类的方法和属性?

qihjn 2008-10-03 02:13:05

//基类
public class BasePage : System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private int userID;
/// <summary>
/// 用户ID
/// </summary>
public int UserID
{
get { return userID; }
set { userID = value; }
}

private string userName;
/// <summary>
/// 用户名
/// </summary>
public string UserName
{
get { return userName; }
set { userName = value; }
}

private int userType;
/// <summary>
/// 用户类型
/// </summary>
public int UserType
{
get { return userType; }
set { userType = value; }
}


public void SetUserCookie()
{
UserID = Convert.ToInt32(Request.Cookies["UserID"].Value);
UserName = Request.Cookies["UserName"].Value;
UserType = Convert.ToInt32(Request.Cookies["UserType"].Value);
}
}



//继承BasePage
public class BaseCompany:BasePage
{
public BaseCompany()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//BasePage bp = new BasePage();

}

为什么BaseCompany里无法使用SetUserCookie,和一些属性是不是要用this. 可是this也点不出来相关属性和方法?
...全文
328 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qihjn 2008-10-06
  • 打赏
  • 举报
回复
谢谢各位
Code従業員 2008-10-03
  • 打赏
  • 举报
回复
搞了半天,原来你直接放到类下了,呵呵,放到类下,系统以为你申明新的方法,而你的方法又没有void当然会有上面说的错误,即使写了,也会发现和父类重名而出错,不过楼主人才,自己发现了,可喜可贺。
qihjn 2008-10-03
  • 打赏
  • 举报
回复
原来类里不可以调用方法的
SetUserCookie(); 被当成了类里成员所以出错,只有把SetUserCookie();放到方法里才是正确的
Houkey 2008-10-03
  • 打赏
  • 举报
回复
为什么在类里面实例化该类的对象呢?
qihjn 2008-10-03
  • 打赏
  • 举报
回复
我发现用a.aspx继承这个父类,也是无法调用 SetUserCookie();只有在Page_Load,或其他方法里才能调用他的属性和成员?这是为什么????若不是放在方法里,则属性和方法都无法直接调用。
qihjn 2008-10-03
  • 打赏
  • 举报
回复
我发现

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// 所有页面的基类
/// </summary>
public class BasePage : System.Web.UI.Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private int userID;
/// <summary>
/// 用户ID
/// </summary>
public int UserID
{
get { return userID; }
set { userID = value; }
}

private string userName;
/// <summary>
/// 用户名
/// </summary>
public string UserName
{
get { return userName; }
set { userName = value; }
}

private int userType;
/// <summary>
/// 用户类型
/// </summary>
public int UserType
{
get { return userType; }
set { userType = value; }
}


public void SetUserCookie()
{
UserID = Convert.ToInt32(Request.Cookies["UserID"].Value);
UserName = Request.Cookies["UserName"].Value;
UserType = Convert.ToInt32(Request.Cookies["UserType"].Value);
}

//在这调用SetUserCookie();就出问题了
//报错如下:错误 1 类、结构或接口方法必须有返回类型
}



这是为什么?在这个基类里也无法调用这个方法?是不是类里不能调用自身方法,可是我在类里
BasePage bp = new BasePage();
bp.SetUserCookie();//这里也点不出他的成员来
是不是类里不允许实例本身?
qihjn 2008-10-03
  • 打赏
  • 举报
回复
都不行啊,有没有其它办法?

按理说应该能直接访问

为什么.cs文件中无法访问父类成员,而aspx里的cs文件却可以访问,这是为什么呢??????????
heroghost1000 2008-10-03
  • 打赏
  • 举报
回复
base.SetUserCookie();
cooolchen 2008-10-03
  • 打赏
  • 举报
回复
估计是你使用的位置或者方式不对。
hornbills 2008-10-03
  • 打赏
  • 举报
回复
请参考

转自http://dev.csdn.net/article/74/74062.shtm


using System;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CommonClass
{
/// <summary>
/// 页面的基类。 ///
/// </summary>
public class PageBase:System.Web.UI.Page
{
public PageBase()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 模块名称
/// </summary>
public String ModuleName
{
set{ViewState["ModuleName"]=value;}
get{return ViewState["ModuleName"].ToString();}
}
private string _Message;
/// <summary>
/// 向用户显示信息提示
/// </summary>
public String Message
{
get{return _Message;}
set{_Message = value;}
}
/// <summary>
/// 检查是否有特定的权限
/// </summary>
/// <param name="sec">安全选项</param>
/// <returns></returns>
// public bool CheckPermissionSuccess(Framework.SecurityOption sec)
// {
// //TODO:实现Framework.Security类,如浏览、修改、管理权限
// return Framework.Security.CheckValid(this.ModuleName,sec);
// }
/// <summary>
/// 页最顶端的PlaceHolder
/// </summary>
public System.Web.UI.WebControls.PlaceHolder plhTopHolder;
/// <summary>
/// 页最底端的PlaceHolder
/// </summary>
public System.Web.UI.WebControls.PlaceHolder plhBottomHolder;

protected override void OnInit(EventArgs e)
{
//初始化控件
plhTopHolder = new PlaceHolder();
plhBottomHolder = new PlaceHolder();

//添加顶端PlaceHolder
Control form1 = this.FindControl("Form1");
if (form1 != null) form1.Controls.AddAt(0,plhTopHolder);

//添加页眉的用户自定义控件
ITemplate Header = Page.LoadTemplate("~/Controls/Header.ascx");
this.plhTopHolder.Controls.Add(Header);

//event
this.Load+=new EventHandler(PageBase_Load);
this.Error+=new EventHandler(PageBase_Error);
this.PreRender+=new EventHandler(PageBase_PreRender);

base.OnInit (e);
}
private void PageBase_Load(object sender, EventArgs e)
{
//添加底端PlaceHolder
Control form1 = this.FindControl("Form1");
if (form1 != null) form1.Controls.Add(plhBottomHolder);
//添加页脚的用户自定义控件
//ITemplate Footer = Page.LoadTemplate("~/Controls/Footer.ascx");
//this.plhBottomHolder.Controls.Add(Footer);

}
private void PageBase_Error(object sender, EventArgs e)
{
#if !Debug
// Exception exc = Server.GetLastError();
// 记录未处理的错误
// XMLLog.AddErrorLog(exc,userName);
// Server.Transfer("~/PageError.aspx?error=" + Server.HtmlEncode(exc.Message));
#endif
}
private void PageBase_PreRender(object sender, EventArgs e)
{
//添加信息提示
if (this._Message != null && this._Message != String.Empty)
{
LiteralControl litMessage = new LiteralControl("<div class=\"CssMessage\"><p>" + Message + "</p></div>");
plhTopHolder.Controls.Add(litMessage);
}
}
}
}


walkingmu 2008-10-03
  • 打赏
  • 举报
回复
你用了两个文件?
请确定两个类是不是放在一个命名空间下。
qihjn 2008-10-03
  • 打赏
  • 举报
回复
在BaseCompany.cs里不可以用SetUserCookie(),可是新建一个a.aspx,然后继承BaseCompany,在a.aspx里就可以使用SetUserCookie(),这是为什么?
难道BaseCompany.cs就不能使用父类的相关方法和属性吗/

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧