Listing 2

using namespace System;
using namespace System::Threading;

/*1*/
public ref class Transaction abstract
{
    TransactionType typeOfTransaction;
/*2*/   DateTime dateTimeOfTransaction;
public:

/*3a*/  property TransactionType TypeOfTransaction
    {
        TransactionType get() { return typeOfTransaction; }
    private:
        void set(TransactionType value) { typeOfTransaction = value; }
    }

/*3b*/  property DateTime DateTimeOfTransaction
    {
        DateTime get() { return dateTimeOfTransaction; }
    private:
        void set(DateTime value) { dateTimeOfTransaction = value; }
    }
    
/*4*/   virtual void PostTransaction() abstract;

protected:
/*5*/   Transaction(TransactionType transType)
    {
/*6*/       Thread::Sleep((gcnew Random)->Next(1000,2001));
/*7*/       TypeOfTransaction = transType;
/*8*/       DateTimeOfTransaction = DateTime::Now;
    }
};