Я использую API, который имеет класс "Member". Я хочу расширить это, поэтому я создал "MemberProfile", который наследуется от "Member"
У меня есть проблема с созданием конструктора для этого класса. Я хочу что-то вроде следующего
var member = Member.GetCurrentMember();
var memberProfile = new MemberProfile(member);
Как выглядит конструктор в MemberProfile. Мне нужно сделать какой-то листинг?
Я предлагаю добавить поле Member
в класс MemberProfile
и инициализировать его в конструкторе. Не наследуйте от Member
.
public class MemberProfile {
public Member Member { get; private set; }
public MemberProfile(Member member) { Member = member; }
}
Если вы действительно хотите наследовать от Member
, вам придется скопировать все свойства из переданного аргумента в новый экземпляр вручную.
Мехрдад прав; MemberProfile не должен наследоваться от Member.
Сделав некоторые предположения относительно вашего контекста приложения, представляется вероятным, что совершенно правдоподобно, что в какой-то момент в будущем один член может иметь более одного профиля.
MemberProfile <<--uses--> Member
а не
MemberProfile --is-a--> Member
Используйте шаблон декоратор
Вам нужно будет создать конструктор, который принимает член как аргумент и выполняет глубокую копию параметров.
public class MemberProfile : Member
{
public MemberProfile(Member member)
{
base.field1 = member.field1;
base.field2 = member.field2;
.
.
base.fieldn = member.fieldn;
}
}
Member
». Похоже,MemberProfile
- это не расширениеMember
, а просто составленный им класс. В макете, который я рисовал, у меня былMemberProfile
как свойствоMember
; обратная сторона вашего предложения. Я полагаю, что любой из этих способов может сработать, в зависимости от потребностей @ frosty.MemberProfile
становится собственностьюMember
, а не наоборот, но мне кажется, что вопрос вMember
- это то, что вы получаете от существующего API, которого вы не делаете иметь контроль (или вы не хотите изменять) и необходимо как-то расширить его.