C # Единый универсальный метод сбора для множественных производных классов - PullRequest
1 голос
/ 26 января 2010

Сценарий

У меня есть один базовый класс и 2 (возможно, 3) других класса, которые являются производными от этого базового класса.

 //Base Class
 class RateInstrument
 {
    public string Ric { get; set; }

    public string Tenor { get; set; }
    public double Rate { get; set; }

    public DateTime Date { get; set; }
    public double Price { get; set; }

    public double Bid { get; set; }
    public double Ask { get; set; }

    public RateInstrument(string tenor, double rate)
    {
        Tenor = tenor;
        Rate = rate;
    }

    public RateInstrument(DateTime date, double price)
    {
        Date= date;
        Price = price;
    }
   }

    //Derived Class 1
    class Swap : RateInstrument
    {
    public Swap(string tenor, double rate): base(tenor,rate)
    {
    }

    }

     //Derived Class 2
     class Future: RateInstrument
     {
    public Future(DateTime date, double price): base(date,price)
    {

    }
    }

Вопрос

В некоторых случаях мне может понадобиться коллекция ВСЕХ инструментов оценки, а иногда просто коллекция каждого отдельного инструмента RateInstrument. Реально, что я хотел, чтобы использовать некоторые методы в базовом классе, чтобы сделать это, однако я не совсем уверен, как это сделать. Для меня важно хорошо структурировать код, чтобы помочь моему обучению и т. Д. Любая помощь будет принята с благодарностью.

EDIT ----------

Извините, я хотел сказать, в сущности возможности создания коллекции объектов в стенографии. Особенно, если мне нужно создать, скажем, 100 одновременно.

Ответы [ 2 ]

2 голосов
/ 26 января 2010

В C # 3.5 вам не нужно ничего делать специально для этого. IEnumerable<RateInstrument> будет хорошо.

Если вам нужны только определенные подтипы, вы можете использовать метод расширения OfType:

var swaps = instruments.OfType<Swap>();
1 голос
/ 26 января 2010

Ваш существующий код не помогает?

List<RateInstrument> instruments = new List<RateInstrument>();
instruments.Add(new Swap("bla", 100));
instruments.Add(new OtherSwap("bla2", 200));

var swapInstruments = from instrument in instruments where instrument Is Swap select instrument;
...