【发布时间】:2010-02-15 12:28:14
【问题描述】:
我有以下具有静态属性和方法的类,可帮助管理网站上的用户。我希望能够通过覆盖一些属性在其他项目中重用这个类。
public class Account {
public static string sessionName = "Account";
public static string tableName = "Accounts";
public static bool isLoggedIn(){
return HttpContext.Current.Session[sessionName] != null;
}
public static bool login(string email, string password){
//connect to database and return user details from specified table
DataTable t = Database.login(tableName, email, password);
DataRow r = t.Rows[0];
HttpContext.Current.Session[sessionName] = r;
return true;
}
public static object val(string name){
return ((DataRow)HttpContext.Current.Session[sessionName])[name];
}
}
这基本上是使用属性中定义的会话名称登录用户并将其详细信息存储在会话中的 DataRow 中。
是否可以像下面这样将此类用于多种类型的用户?
public class WebsiteUser : Account {
public override string sessionName = "WebsiteUser";
public override string tableName = "WebsiteUsers";
}
public class TradeUser : Account {
public override string sessionName = "TradeUser";
public override string tableName = "TradeUsers";
}
然后调用下面的代码来使用每个派生类。
if (WebsiteUser.isLoggedIn()){
//manage website user
}
if (TradeUser.isLoggedIn()){
//manage trade user
}
【问题讨论】:
-
只是一个一般性的想法,我认为,您可以不同意:避免直接使用 DataRows 等,它可能成为维护地狱,而是创建一个包含相关属性的域对象和将 DataRow 映射到该对象的属性。
标签: c# inheritance class