Как уже говорили другие, вы не можете перегружать операторы, используя методы расширения - но простой метод расширения все равно будет полезен:
public static MembershipUser ToMembershipUser(this User user)
{
return new MembershipUser("SimplyMembershipProvider",
user.UserName, user.UserId, user.Email, null, null,
user.IsApproved, user.IsLocked, user.CreateDate,
user.LastLoginDate, user.LastActivityDate, user.CreateDate,
DateTime.MinValue);
}
Тогда просто используйте его как:
User user = ...;
MembershipUser membershipUser = user.ToMembershipUser();
Лично я нахожу это более ясным, чем использование явного преобразования в любом случае - я очень редко занимаюсь перегрузкой операторов.В частности, учитывая, что классы безусловно sound связаны, наивный пользователь может ожидать, что этот код:
User user = ...;
MembershipUser membershipUser = (MembershipUser) user;
... будет нормальным эталонным преобразованием, ожидая, что MembershipUser
будеткласс, производный от User
.Это важно с точки зрения идентификации объекта - если бы это было , то это не изменило бы вовлеченный объект (и изменения в объекте, на который ссылается user
, все равно были бы видны через membershipUser
).
Создание метода ToMembershipUser
упрощает преобразование одной формы в новый объект другого типа.Все ИМО, конечно :) 1021 *