public StackBlockSpecBase(string tag, int index, BlockSpecTypes blockType)
        {
            Tag       = string.IsNullOrEmpty(tag) ? "Block " + index : tag;
            Index     = index;
            BlockType = blockType;

            if (blockType == BlockSpecTypes.Finally)
            {
                Tag = BlockSpecTypes.Finally.ToString();
            }
            else if (Tag == BlockSpecTypes.Finally.ToString())
            {
                throw new OperationStackDeclarationException("Tag 'Finally' is reserved for Finally blocks");
            }
        }
 public StackBlockSpecOperation(string tag, int index, Func <TInput, TState, IStackEvents <TOperationEvent>, IEmptyable, StackBlockBase <TInput, TState, TOperationEvent> > blockBuilder, BlockSpecTypes blockType)
     : base(tag, index, blockType)
 {
     this.blockBuilder = blockBuilder;
 }
 public StackBlockSpecEvent(int index, Func <TInput, TState, IStackEvents <TOperationEvent>, IEmptyable, StackBlockBase <TInput, TState, TOperationEvent> > blockBuilder, BlockSpecTypes blockType = BlockSpecTypes.EventsHandler)
     : base("EventHandler " + index, index, blockType)
 {
     this.blockBuilder = blockBuilder;
 }
 public StackBlockSpecBase(int index, BlockSpecTypes blockType)
     : this("Block " + index, index, blockType)
 {
 }