context: 
  //
  // This file was generated by the BinaryNotes compiler.
  // See http://bnotes.sourceforge.net 
  // Any modifications to this file will be lost upon recompilation of the source ASN.1. 
  //
  
  using System;
  using org.bn.attributes;
  using org.bn.attributes.constraints;
  using org.bn.coders;
  using org.bn.types;
  using org.bn;
  
  namespace MMS_ASN1_Model {
  
  
      [ASN1PreparedElement]
      [ASN1Choice ( Name = "VariableSpecification") ]
      public class VariableSpecification : IASN1PreparedElement {
                      
          
  	private ObjectName name_ ;
          private bool  name_selected = false ;
          
                  
          
          [ASN1Element ( Name = "name", IsOptional =  false , HasTag =  true, Tag = 0 , HasDefaultValue =  false )  ]
      
          public ObjectName Name
          {
              get { return name_; }
              set { selectName(value); }
          }
          
                  
            
          
  	private Address address_ ;
          private bool  address_selected = false ;
          
                  
          
          [ASN1Element ( Name = "address", IsOptional =  false , HasTag =  true, Tag = 1 , HasDefaultValue =  false )  ]
      
          public Address Address
          {
              get { return address_; }
              set { selectAddress(value); }
          }
          
                  
            
          
  	private VariableDescriptionSequenceType variableDescription_ ;
          private bool  variableDescription_selected = false ;
          
                  
          
         [ASN1PreparedElement]
         [ASN1Sequence ( Name = "variableDescription", IsSet = false  )]
         public class VariableDescriptionSequenceType : IASN1PreparedElement {
                          
  	private Address address_ ;
  	
          [ASN1Element ( Name = "address", IsOptional =  false , HasTag =  false  , HasDefaultValue =  false )  ]
      
          public Address Address
          {
              get { return address_; }
              set { address_ = value;  }
          }
          
                  
            
  	private TypeSpecification typeSpecification_ ;
  	
          [ASN1Element ( Name = "typeSpecification", IsOptional =  false , HasTag =  false  , HasDefaultValue =  false )  ]
      
          public TypeSpecification TypeSpecification
          {
              get { return typeSpecification_; }
              set { typeSpecification_ = value;  }
          }
          
                  
    
                  
                  public void initWithDefaults() {
              		
                  }
  
              private static IASN1PreparedElementData preparedData = CoderFactory.getInstance().newPreparedElementData(typeof(VariableDescriptionSequenceType));
              public IASN1PreparedElementData PreparedData {
              	get { return preparedData; }
              }
  
                  
         }
                  
          [ASN1Element ( Name = "variableDescription", IsOptional =  false , HasTag =  true, Tag = 2 , HasDefaultValue =  false )  ]
      
          public VariableDescriptionSequenceType VariableDescription
          {
              get { return variableDescription_; }
              set { selectVariableDescription(value); }
          }
          
                  
            
          
  	private ScatteredAccessDescription scatteredAccessDescription_ ;
          private bool  scatteredAccessDescription_selected = false ;
          
                  
          
          [ASN1Element ( Name = "scatteredAccessDescription", IsOptional =  false , HasTag =  true, Tag = 3 , HasDefaultValue =  false )  ]
      
          public ScatteredAccessDescription ScatteredAccessDescription
          {
              get { return scatteredAccessDescription_; }
              set { selectScatteredAccessDescription(value); }
          }
          
                  
            
          
  	private NullObject invalidated_ ;
          private bool  invalidated_selected = false ;
          
                  
          
          [ASN1Null ( Name = "invalidated" )]
      
          [ASN1Element ( Name = "invalidated", IsOptional =  false , HasTag =  true, Tag = 4 , HasDefaultValue =  false )  ]
      
          public NullObject Invalidated
          {
              get { return invalidated_; }
              set { selectInvalidated(value); }
          }
          
                  
            
          public bool isNameSelected () {
              return this.name_selected ;
          }
  
          
  
  
          public void selectName (ObjectName val) {
              this.name_ = val;
              this.name_selected = true;
              
              
                      this.address_selected = false;
                  
                      this.variableDescription_selected = false;
                  
                      this.scatteredAccessDescription_selected = false;
                  
                      this.invalidated_selected = false;
                              
          }
          
            
          public bool isAddressSelected () {
              return this.address_selected ;
          }
  
          
  
  
          public void selectAddress (Address val) {
              this.address_ = val;
              this.address_selected = true;
              
              
                      this.name_selected = false;
                  
                      this.variableDescription_selected = false;
                  
                      this.scatteredAccessDescription_selected = false;
                  
                      this.invalidated_selected = false;
                              
          }
          
            
          public bool isVariableDescriptionSelected () {
              return this.variableDescription_selected ;
          }
  
          
  
  
          public void selectVariableDescription (VariableDescriptionSequenceType val) {
              this.variableDescription_ = val;
              this.variableDescription_selected = true;
              
              
                      this.name_selected = false;
                  
                      this.address_selected = false;
                  
                      this.scatteredAccessDescription_selected = false;
                  
                      this.invalidated_selected = false;
                              
          }
          
            
          public bool isScatteredAccessDescriptionSelected () {
              return this.scatteredAccessDescription_selected ;
          }
  
          
  
  
          public void selectScatteredAccessDescription (ScatteredAccessDescription val) {
              this.scatteredAccessDescription_ = val;
              this.scatteredAccessDescription_selected = true;
              
              
                      this.name_selected = false;
                  
                      this.address_selected = false;
                  
                      this.variableDescription_selected = false;
                  
                      this.invalidated_selected = false;
                              
          }
          
            
          public bool isInvalidatedSelected () {
              return this.invalidated_selected ;
          }
  
          
          public void selectInvalidated () {
  
gt:             selectInvalidated (new NullObject());