2011-04-06 19 views
10

In C#, come è possibile scoprire se è possibile creare un'istanza Type? Sto cercando di evitare un'eccezione Activator.CreateInstance.Scoprire se il tipo è istantaneo

Il mio metodo attuale è type.IsClass && !type.IsInterface, ma sono preoccupato che questo potrebbe non riuscire nelle classi astratte, ecc. Ho anche considerato di verificare type.TypeInitializer == null, ma non sono sicuro che sia infallibile.

Qual è il modo più semplice/efficace per scoprire se un Type è istantaneo?

+4

C'è 'type.IsAbstract'. –

+1

Affinché sia ​​"sicuro", non dovrebbe controllare IsPublic e le proprietà simili nell'oggetto ConstructorInfo restituito da GetConstructor(). Non lo so. Sto chiedendo .. –

risposta

7

Ci sono molte altre trappole. Potrebbe avere un costruttore privato o protetto. Oppure potrebbe non avere un costruttore predefinito, solo costruttori che accettano determinati tipi di argomenti. Se devi preoccuparti di questo, sicuramente stai usando Activator.CreateInstance() quando non dovrebbe essere usato. Costruire oggetti in modo arbitrario può solo creare scompiglio, non hai idea del tipo di effetti collaterali che possono avere. Evita la classe "FormatDisk".

Un'eccezione è il tuo amico, ti dice che le tue ipotesi erano sbagliate. Non interrompere mai intenzionalmente il framework .NET dall'essere utile.

+0

Sto creando istanze di implementazioni di un'interfaccia, quindi so qualcosa su di loro. Apprezzo l'avvertimento, però. – user664939

+0

Eccellente, quindi non dovresti preoccuparti delle eccezioni o creare accidentalmente una classe astratta. Un semplice nome ben noto ha il compito. –

+0

Come posso verificare la presenza di un costruttore predefinito? – user664939

Problemi correlati