У меня есть пользовательский CustomMembershipUser, который наследуется от MembershipUser.
public class ConfigMembershipUser : MembershipUser
{
// custom stuff
}
Я использую Linq-to-SQL для чтения из базы данных и получения объекта User; чтобы сделать эту функцию членом MemberhipUser Я определил явное преобразование:
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;
Я получаю ошибку intellisense, сообщающую, что неявный приведение не будет работать, но существует явное действие.
... и, прежде всего, я не могу определить трансляцию из базового класса в подкласс. Я попробовал, и это провалилось. То, что я не понимаю больше всего, - почему отказ от базового класса в подкласс когда-либо терпит неудачу? По определению подкласс имеет все свойства базового класса, поэтому какая проблема.
ИЗМЕНИТЬ
Я попытался определить явное преобразование из 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 оператор CustomMembershipUser (System.Web.Security.MembershipUser) ': пользовательские преобразования к базовому классу или из него не допускаются.
Итак... Я не могу отбрасывать из базового класса в подкласс?