Ciao,
secondo me il modo migliore di approcciare questa tua situazione è sicuramente usare un'interfaccia oppure una classe base, per fare in modo che casti l'oggetto che ti torna l'Activator a una di quelle 2.
Quindi dire alle 2 classi che implementano entrambe quell'interfaccia o che ereditano da quella classe base, e quindi avere un codice di questo tipo:
IOggettoMio obj = (IOggettoMio)Activator.CreateIstance(...);
obj.MetodoInterfaccia(...);
....
la cosa tecnicamnete è uguale anche se "IOggettoMio" è una classe base, ma il concetto è diverso, ossia nel caso dell'interfaccia tu stai definendo solo "l'esistenza di quei metodi/proprietà" che quell'oggetto ha (una "firma" diciamo) ed ecco che infatti devi implementarlo nell'oggetto stesso:
public interface IOggettoMio
{
void MetodoInterfaccia(...);
string Proprieta { get; set; }
....
}
e poi l'oggetto reale
MioOggettoReale : IOggettoMio
{
.... implementi scrivendo il codice dentro ai metodi/proprietà
Se eredita non devi implementare i metodi ma se vuoi puoi farne "l'override" ossia "sovrascriverli" con il codice di quella classe che eredita, altrimenti cmq viene eseguito il codice di quella base...ma cmq ogni classe poi potrebbe avere altri metodi/proprietà etc...
Cmq ti conviene dare un'occhiata a questi link, dove viene spiegato in maniera approfondita:
http://msdn.microsoft.com/it-it/library/ms173156.aspx
http://msdn.microsoft.com/it-it/library/ms173149.aspx
Altrimenti se vuoi fare un metodo "tentative-oriented" puoi cmq provare il cast su un tipo, e vedere se torna nullo allora non è di quel tipo ma dell'altro:
object obj = Activator.CreateIstance(...);
TipoA tipoa = obj as TipoA;
if(tipoa == null)
{
TipoB tipob = obj as TipoB;
tipob....
}
ma è abbastanza un "spaghetti code", meglio lavorare con Interfacce o Classi base, che è "Object-Oriented"....
Ciao.
Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo