Skip to content

Instantly share code, notes, and snippets.

@AlexanderByndyu
Created August 12, 2014 09:58
Show Gist options
  • Select an option

  • Save AlexanderByndyu/e795c1e6d6c9161e3de9 to your computer and use it in GitHub Desktop.

Select an option

Save AlexanderByndyu/e795c1e6d6c9161e3de9 to your computer and use it in GitHub Desktop.
namespace ПредметнаяОбласть
{
using System;
using System.Collections.Generic;
internal abstract class Документ
{
private readonly List<Строка_Документа> строки = new List<Строка_Документа>();
public Документ()
{
ДатаСоздания = DateTime.Now;
}
public int Номер { get; set; }
public DateTime ДатаСоздания { get; private set; }
public IEnumerable<Строка_Документа> Строки
{
get { return строки.AsReadOnly(); }
}
public virtual void ДобавитьСтрокуДокумента(Строка_Документа строкаДокумента)
{
строкаДокумента.НазначитьДокумент(this);
строки.Add(строкаДокумента);
}
}
internal class Документ_с_Товаром : Документ
{
public int СпецифическоеПолеДляЭтогоТипаДокумента { get; set; }
public override void ДобавитьСтрокуДокумента(Строка_Документа строкаДокумента)
{
base.ДобавитьСтрокуДокумента(строкаДокумента);
// делаем что-то специфическое для этого типа документа
}
}
internal class Документ_с_Товаром_и_Услугой : Документ
{
public int СпецифическоеПолеДляЭтогоТипаДокумента { get; set; }
public override void ДобавитьСтрокуДокумента(Строка_Документа строкаДокумента)
{
base.ДобавитьСтрокуДокумента(строкаДокумента);
// делаем что-то специфическое для этого типа документа
}
}
internal abstract class Строка_Документа
{
public int Id { get; set; }
public Документ СсылкаНаДокумент { get; private set; }
public void НазначитьДокумент(Документ документ)
{
СсылкаНаДокумент = документ;
}
}
internal class Строка_с_Товаром : Строка_Документа
{
public int ДанныеТовара { get; set; }
}
internal class Строка_с_Услугой : Строка_Документа
{
public int ДанныеУслуги { get; set; }
}
internal class Program
{
private static void Main()
{
var строка_с_Товаром1 = new Строка_с_Товаром {Id = 7};
var строка_с_Товаром2 = new Строка_с_Товаром {Id = 8};
var документ1 = new Документ_с_Товаром {Номер = 1};
документ1.ДобавитьСтрокуДокумента(строка_с_Товаром1);
документ1.ДобавитьСтрокуДокумента(строка_с_Товаром2);
var cтрока_с_Услугой1 = new Строка_с_Услугой {Id = 8};
var документ2 = new Документ_с_Товаром_и_Услугой {Номер = 2};
документ2.ДобавитьСтрокуДокумента(строка_с_Товаром1);
документ2.ДобавитьСтрокуДокумента(cтрока_с_Услугой1);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment