C # - come qualificare un membro statico in oggetto derivato tramite riflessione

1

Sto provando a fare riferimento a un membro di un oggetto di tipo "ExternalSourceProvider" che è stato istanziato tramite il reflection in questo modo:

        Type type = GetProviderType(vendor);
        ConstructorInfo constructorInfo = type.GetConstructor(new Type[] { typeof(NameValueCollection) });
        ExternalSourceProvider vendorSourceProvider = (ExternalSourceProvider)constructorInfo.Invoke(new Object[] { requestData });

Ora desidero impostare il valore per un membro statico dell'oggetto appena istanziato come segue:

        (ExternalSourceProvider)vendorSourceProvider.App = this.App;

Ho ricevuto l'errore:

Non è possibile accedere al membro ExternalSourceProvider.App con un riferimento di istanza, ma invece qualificarlo con un nome di tipo.

Questo perché C # non consente di chiamare metodi statici con un riferimento di istanza

Sto provando a creare un pattern in cui chiamo un membro "ExternalSourceProvider.App" su tutti i bambini che ereditano la classe base di tipo ExternalSourceProvider, in modo che "ExternalSourceProvider.App" sia identico per tutti i figli ereditari.

Come posso ottenere ciò che sto cercando di fare?

    
posta Johnny 14.11.2016 - 01:31
fonte

1 risposta

2

È necessario specificare il tipo effettivo di cui si desidera il membro statico.

Usando il reflection, dovrai cercare la proprietà / campo statico attraverso il reflection e chiamarlo in questo modo. Vedi PropertyInfo.SetValue (o FieldInfo se è un vero e proprio campo).

Tutto ciò che ho detto - i dati statici sono sgradevoli, e se devi saltare attraverso pile di cerchi di riflessione, probabilmente stai facendo qualcosa di malvagio. Per favore riconsidera.

    
risposta data 14.11.2016 - 02:11
fonte

Leggi altre domande sui tag