我有一个继承自 MembershipUser 的自定义 CustomMembershipUser。
public class ConfigMembershipUser : MembershipUser
{
// custom stuff
}
我正在使用 Linq-to-SQL 从数据库中读取并获取用户实体;为了使这个函数成为 MembershipUser 我已经定义了一个显式转换:
public static explicit operator MembershipUser(User user)
{
DateTime now = DateTime.Now;
if (user == null) return null;
return new MembershipUser("MagicMembershipProvider",
user.DisplayName, user.Id,
user.Email, "", "", true, false,
now, now, now, now, now);
}
这个演员工作正常:
MembershipUser memUser = (MembershipUser) entityUser;
但是,第二次转换为 CustomMembershipUser 失败:
MembershipUser memUser = (MembershipUser) entityUser;
CustomMembershipUser custUser = (CustomMembershipUser) memUser;
如果我将演员更改为
CustomMembershipUser custUser = memUser;
我收到一个智能感知错误,告诉我隐式转换不起作用,但存在显式转换。
...最重要的是,我显然无法定义从基类到子类的强制转换。我试过了,但失败了。我最不明白的是为什么从基类到子类的转换会失败?根据定义,子类具有基类的所有属性,所以有什么问题。
编辑
我尝试定义从 MembershipUser 到 CustomMembershipUser 的显式转换(首先我为转换定义了一个私有构造函数):
private ConfigMembershipUser(MembershipUser user)
: base(user.ProviderName, user.UserName, user.ProviderUserKey, user.Email,
user.PasswordQuestion, user.Comment, user.IsApproved, user.IsLockedOut,
user.CreationDate, user.LastLoginDate, user.LastActivityDate,
user.LastPasswordChangedDate, user.LastLockoutDate)
{
// initialize extended CustomMembershipUser stuff here
}
然后我定义了我的自定义演员:
public static explicit operator CustomMembershipUser(MembershipUser user)
{
return new CustomMembershipUser(user);
}
我收到以下错误:
'CustomMembershipUser.explicit operator CustomMembershipUser (System.Web.Security.MembershipUser)':不允许用户定义的与基类之间的转换。
所以...我不能从基类转换为子类?