Вы можете решить эту проблему, создав интерфейс IPerson
и заменив конкретный класс Person
классом, который наследуется от MembershipUser
и реализует IPerson
.
Вы также можете оставить свой конкретный Person
, создать IPerson
и иметь свой собственный класс, инкапсулирующий экземпляр Person
и наследующий от MembershipUser
при реализации IPerson
.
В любом случае, везде, где вы когда-то использовали конкретный тип Person
, вы должны заменить на IPerson
(например, аргументы метода).
interface IPerson
{
string LastName { get; set; }
// ...
}
class MyMembershipUser : MembershipUser, IPerson
{
private Person _person = new Person();
// constructors, etc.
public string LastName
{
get { return _person.LastName; }
set { _person.LastName = value; }
}
}
В качестве альтернативы вы можете продолжить использовать Person и инкапсулировать его в экземпляр MembershipUser (как часть конструктора) и включить явное приведение Person к MembershipUser при необходимости ...
class Person
{
private readonly MembershipUser _mu;
public Person(MembershipUser mu)
{
_mu = mu;
}
public static explicit operator MembershipUser(Person p)
{
// todo null check
return p._mu;
}
}
// example
var person = new Person(Membership.GetUser("user"));
Membership.UpdateUser((MembershipUser)person);
Я бы сам пошел с решением по реализации интерфейса.