title: How to connect multiple base classes to multiple subclasses through single interface in C#?
body: <p>I've got three classes that inherit from a higher base class that we'll call UpperCaseLetters. Therein there are classes LetterA, LetterB, and LetterC. I wish to build an interface to connect them each to respective subclasses LowerA, LowerB, and LowerC. I have one interface that has a single property "UpperCaseLetter" that effectively stores or references the corresponding uppercase letter. This is fine for when I want to construct a single object of known type at the lower case letter level, because I can just as easily cite the uppercase letter manually. </p>
  
  <p>I need to build a script that is capable of looking at my existing set of uppercase letters, and build a corresponding lowercase letter object by implementing the interface, such that I end up with a lowercase letter object, such as LowerA, that implements the property from the interface referencing the LetterA object it is attached to. </p>
  
  <p>In C#, iterating through a loop, when I come across an item that does not appear to have a matching LowerCaseLetter object, how can use type information from the UpperCaseLetter subclass (LetterA, LetterB, or LetterC) to dynamically construct a corresponding LowerCaseLetter object of the respective LowerCaseLetter subclass (LowerA, LowerB, or LowerC) without statically listing out the types of subclasses in each letter case available?</p>
  
  <p>Thanks in advance</p>
  
  <p>EDIT: Code to demonstrate what I mean:</p>
  
  <pre><code>class UpperCaseLetter {
  public bool Italic
  }
  
  class LetterA : UpperCaseLetter {
  
  }
  
  class LetterB : UpperCaseLetter {
  
  }
  
  interface LowerCaseLetter {
      public UpperCaseLetter OriginalLetter;
  }
  
  class LowerA : LetterA, LowerCaseLetter { 
  
  }
  
  class LowerB : LetterB, LowerCaseLetter {
  
  }
  
  
  void BuildLowerCaseLetters {
      foreach (var upperLetter in setOfImaginaryBuiltLetterObjects){
          //below is how the code currently works, but any time I build a new pair of 
          //classes, say, LetterD and LowerD, this section needs to be modified. 
          //Looking for a dynamic solution
          if (upperLetter is LetterA){
              new LowerA();
          } else if (upperLetter is LetterB){
              new LowerB();
          } 
      }   
  
  }
  </code></pre>