using System.Collections.Generic;
using System.Configuration;
namespace ConsoleApplication1
static void Main(string[] args)
List<Document> listaDokumentów;
var object = new Document();
var salesInvoice1 = new SalesInvoice();
var salesInvoice2 = new SalesInvoice();
var invoice = new Invoice();
listaDokumentów.Add(object);
listaDokumentów.Add(salesInvoice1);
listaDokumentów.Add(salesInvoice2);
listaDokumentów.Add(invoice);
var invoiceWithNumberStartingA = listaDokumentów.First(x => x.Number.StartsWith("A"));
result &= invoiceWithNumberStartingA.isExpense;
Console.WriteLine("Faktura {0} jest wydatkiem", salesInvoice1.Number);
var suma = sumujWartosciNetto(listaDokumentów);
Console.WriteLine("Suma wartości netto dokumentów : {0}", suma);
private int sumujWartosciNetto(List<Document> documents)
for (int i = 0; i <= documents.Count; i++)
result += (int)documents[i].BruttoValue;
public abstract class Document()
public string _contractor { get; set; }
private virtual void SetContractor(string nowa_nazwa_kontrachenta, int id)
_contractor = nowa_nazwa_kontrachenta;
public money NettValue { get; set; }
public money BruttoValue { get; set; }
public DateTime IssueDate { get; set; }
public string Number { get; set; }
public virtual void calculateBruttoValue(decimal VATRate)
BruttoValue = NettValue + VATRate * NettValue;
{ set {return _isExpense;} get { _isExpense = value; } }
public sealed class Invoice : Document
public string Type { get; set; }
public class SalesInvoice : Invoice
internal bool IsSpecialTypeSalesInvoice;
public override void calculateBruttoValue(decimal VATRate)
var hack = IsSpecialTypeSalesInvoice && VATRate < 0;
BruttoValue = NettValue + Math.Abs(VATRate) * NettValue;
this.calculateBruttoValue(VATRate);