Ho una vasta raccolta di oggetti generati automaticamente. Sebbene siano tutte di classi diverse e non correlate, tutti gli oggetti condividono alcune proprietà di base (nome, ID, ecc.). Non controllo la generazione di questi oggetti, quindi sfortunatamente non riesco ad adottare l'approccio ideale per implementare un'interfaccia. Vorrei creare un metodo in cui passo uno di questi oggetti arbitrario e faccio qualcosa usando queste proprietà comuni.Metodo per gestire oggetti con proprietà in comune, ma tipi di oggetti diversi
L'idea generale sarebbe qualcosa di simile:
someObj a = new someObj();
a.name = "sara";
diffObj b = new diffObj();
b.name = "joe";
string phrase = string.Format("I am with {0} and {1}",
getName(a), getName(b));
private string getName(object anyObjWithName)
{
return anyObjWithName.name;
}
anche se, naturalmente, questo non funziona.
Ho pensato che un metodo generico potesse contenere la risposta, ma l'unico modo che posso vedere per chiamarlo con il tipo corrente è usare genericMethod.Invoke
, che continua a comportare lo stesso problema di non essere in grado di risolvere le proprietà dell'oggetto passato nel metodo. Questo è diverso da Calling generic method with a type argument known only at execution time o How to call generic method with a given Type object? in cui solo il tipo o le proprietà del tipo vengono utilizzate nel metodo, al contrario delle proprietà dell'oggetto.
Sono consapevole che questo sarebbe (molto) incline all'errore, ma posso garantire che tutti gli oggetti incontrati avranno le proprietà comuni che vengono manipolate.
Utilizzare un'interfaccia? – Michael
Provare a dichiarare un'interfaccia per correlare gli oggetti con le proprietà comuni o utilizzare la riflessione. – Nayan
http://msdn.microsoft.com/en-us/library/64syzecx.aspx – Crisfole