Принципы ООП в C # - PullRequest
       1

Принципы ООП в C #

0 голосов
/ 17 сентября 2011

У меня есть библиотека (без источника), к определенному объекту которой мне нужно добавить некоторые свойства.Каков был бы способ сделать это?Я знаю, что могу расширить класс и добавить свойства для ребенка.Также я знаю, что в C # нет свойств расширения.Что ты предлагаешь ?Спасибо!

Метаданные класса могут быть примерно такими:

 public class ResultClass
 {
    public IList<Item> Results { get; set; }
    public int TotalResults { get; set; }
 }

, и я хочу добавить:

 String description;

к нему.Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 сентября 2011

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

После просмотра расширенного вопроса:

Любая стратегия, описанная выше (состав или наследование)), вероятно, будет работать для вас.Лично я предпочитаю композицию.Я думаю, что это лучше изолирует вас от изменений, которые могут быть сделаны в сторонней библиотеке.Это также вынуждает вас работать через открытый интерфейс библиотечного класса, который предпочтителен, если у вас нет знаний или контроля над внутренними компонентами класса.

Вот самый базовый пример композиции.

public CompositeClass
{
    private ResultClass _resultClass = new ResultClass();

    public IList<Item> Results
    {
        get { return _resultClass.Results; }
        set { _resultClass.Results = value; }
    }

    public int TotalResults
    {
        get { return _resultClass.TotalResults; }
        set { _resultClass.TotalResults = value; }
    }

    //
    // New Property
    //
    public string Description { get; set; }
}
1 голос
/ 17 сентября 2011

Зачем вам нужно добавлять свойства?Если это для целей привязки, то я бы предложил создать класс-оболочку или создать собственный наследуемый тип, который может вызывать события PropertyChanged в ответ на различные изменения состояния ваших сторонних типов.Вместо того, чтобы сообщать нам свое предлагаемое решение, вы должны сообщить нам реальную проблему, которую вы пытаетесь решить.Кроме того (поскольку я не могу голосовать за закрытие / перенос), это не совсем правильное обсуждение для этого сайта.

0 голосов
/ 17 сентября 2011

Я думаю, что вы путаете методы расширения со свойствами расширения.И последние не существуют в C #.Поэтому вы должны расширить класс или создать наследующий класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...