Newsgroup: it.comp.lang.visual-basic
Titolo: [NET] Creare proprietà a run-time

Ciao,
è possibile secondo voi creare sotto NET delle proprietà a run-time?
Mi spiego meglio: ho un oggetto che espone alcune proprietà, ad esempio: 
l'oggetto Uomo che espone le proprietà Uomo.Età, Uomo.Altezza e così via.
Ho la necessità di avere altre proprietà per l'oggetto, ma che verranno 
decise a run-time, cioè dall'utente finale.
Qualcuno ha mai esplorato nei meandri della Reflection se questa (lo 
ammetto, improbabile) strada è percorribile?
Thks.

ammetto, improbabile) strada è percorribile?
Volendo, puoi mimarlo gia' molto bene anche in vb6, comunque mi par di
capire che vuoi far si' che il tuo utente crei un nuovo oggetto,
partendo o meno da uno gia' esistente:
HOW TO: Create An Assembly at Runtime and Call Methods
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B821778
-- 
ciao, hal

 
Grazie.
In realtà non è quello di cui avrei bisogno.
Mi servirebbe un meccanismo che funzioni come l'insieme di controlli in 
un contenitore: aggiunta dinamica di oggetti, rimozione, eccetera... il 
tutto veramente "on fly", senza dover creare file e per poi compilarli.
Per mimarlo ho già un'idea, ma mi serviva qualcosa di meno 
"ballerino"... per curiosità, come lo faresti in VB6?

 è possibile secondo voi creare sotto NET delle proprietà a run-time?
Credo di: ni...
Ovvero: non puoi aggiungere proprietà a Runtime ad un oggetto esistente.
...però puoi creare oggetti costruiti a tuo piacere usando le classi del
namespace System.Reflection.Emit.
Per curiosità, se non sono troppo indiscreto... a cosa ti serve?
    Ciao
        Allanon
-- 
- SPAMKILLER
 lasciate il NOSPAM nell'indirizzo: 
itlangv...@michele.sytes.net
 e lasciate la parola SPAMKILLER nel corpo dell'email


Un sistema che puo' funzionare in entrambi gli ambienti ricalca quello
usato, tra gli altri, da ADO per definire le proprieta' estese degli oggetti
Connection, Recordset ecc.. che potendo cambiare da un provider all'altro
sono appunto differenti e dinamiche.
Quindi definisci una classe Property, con gli attributi che credi, e un
insieme Properties, nel quale sfrutterai la caratteristica di utilizzare
come chiave lo stesso nome di proprieta' (meglio usare una tua classe
tipizzata anche qui: in .NET e' "naturale" derivando da uno degli insiemi a
tua disposizione, ma e' fattibile semplicemente anche in VB6 con meccanismo
di delega verso una Collection, come fa per esempio il wizard di creazione
classi).
A questo punto potrai aggiungere tale insieme come membro pubblico in tutte
le classi che ti interessano, e a grandi linee dovresti essere a posto.
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Per curiosità, se non sono troppo indiscreto... a cosa ti serve?
Rispondo (e ringrazio) qui anche agli altri che mi hanno dato un 
consiglio, purtroppo nessuno utilizzabile nel mio caso.
Vi illustro più nei dettagli il problema: ho creato una serie di oggetti 
connessi gerarchicamente fra di loro in modo da formare una sorta di 
distinta base (anche se l'uso finale è tutt'altro, ma tanto per capirci).
Poi ho implementato l'interfaccia IBindingList in modo da far sì che con 
una semplice riga di codice la mia gerarchia venga visualizzata in una 
griglia (o un TreeList, è lo stesso), con update, add e remove tutto in 
automatico.
Ciascun elemento della gerarchia, poi, ammette la creazione di attributi 
"dinamici", che ho implementato come oggetti contenuti in una 
BaseCollection associata a ciascun elemento.
Dunque ogni volta che l'utente clicca su una riga della griglia io posso 
visualizzare i suoi attributi dinamici in una seconda griglia (che è 
dunque come la tabella delle proprietà in uso nell'IDE 
VB.NET
 o VB6). Il 
bello è che questi attributi li decide completamente a run-time l'utente 
(anche nel tipo dati: immagini, numeri, testi...).
Adesso il problema: mi piacerebbe che l'utente potesse visualizzare gli 
attributi dinamici non solo nella griglia delle proprietà ma anche nella 
griglia principale, come colonne aggiunte.
L'IBindingList vuole ovviamente che le colonne siano legate alle 
proprietà pubbliche della classe cui appartiene l'istanza che è a capo 
della mia gerarchia di oggetti, da qui la mia richiesta.
Ovviamente potrei costruire "a manina" le colonne aggiuntive nella 
griglia principale e accodarle ogni volta che la griglia viene popolata 
e poi gestire sempre a mano l'update, remove eccetera eccetera, però 
l'IBindingList è troppo comoda per non tentare prima questa strada.
Una soluzione ce l'avrei già, ma è brutta. Sto cercando qualcosa di più 
elegante.
Scusate la prolissità...