Вопрос наследования C #

2

Я использую API, который имеет класс "Member". Я хочу расширить это, поэтому я создал "MemberProfile", который наследуется от "Member"

У меня есть проблема с созданием конструктора для этого класса. Я хочу что-то вроде следующего

    var member = Member.GetCurrentMember();
    var memberProfile = new MemberProfile(member);

Как выглядит конструктор в MemberProfile. Мне нужно сделать какой-то листинг?

Теги:
polymorphism
inheritance

4 ответа

10
Лучший ответ

Я предлагаю добавить поле Member в класс MemberProfile и инициализировать его в конструкторе. Не наследуйте от Member.

public class MemberProfile {
    public Member Member { get; private set; }
    public MemberProfile(Member member) { Member = member; }
}

Если вы действительно хотите наследовать от Member, вам придется скопировать все свойства из переданного аргумента в новый экземпляр вручную.

  • 0
    +1 за «Не наследуй от Member ». Похоже, MemberProfile - это не расширение Member , а просто составленный им класс. В макете, который я рисовал, у меня был MemberProfile как свойство Member ; обратная сторона вашего предложения. Я полагаю, что любой из этих способов может сработать, в зависимости от потребностей @ frosty.
  • 0
    @JMD: Действительно, имеет смысл (основываясь только на именах), что MemberProfile становится собственностью Member , а не наоборот, но мне кажется, что вопрос в Member - это то, что вы получаете от существующего API, которого вы не делаете иметь контроль (или вы не хотите изменять) и необходимо как-то расширить его.
Показать ещё 1 комментарий
3

Мехрдад прав; MemberProfile не должен наследоваться от Member.

Сделав некоторые предположения относительно вашего контекста приложения, представляется вероятным, что совершенно правдоподобно, что в какой-то момент в будущем один член может иметь более одного профиля.

MemberProfile <<--uses--> Member

а не

MemberProfile --is-a--> Member
2

Используйте шаблон декоратор

0

Вам нужно будет создать конструктор, который принимает член как аргумент и выполняет глубокую копию параметров.

public class MemberProfile : Member
{
    public MemberProfile(Member member)
    {
        base.field1 = member.field1;
        base.field2 = member.field2;
            .
            .
        base.fieldn = member.fieldn;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню