[ gristic @ 01.09.2006. 15:49 ] @
Kako mogu dinamicki da definisem promenjive u C#. Nesto kao u PHP-u:
for($i=0;$i<10;$i++)
{
lokal$i=something;
}
[ VerbatimBOT @ 01.09.2006. 15:55 ] @
Hm... nisam siguran da se to zove dinamičko definisanje, ali možeš bilo gde u kodu da ih definišeš:
Code:

for (int i=0; i<uslov; i++)
{
        // ovde dolazi neki kod
}
[ mmix @ 01.09.2006. 16:02 ] @
Citat:
gristic: Kako mogu dinamicki da definisem promenjive u C#. Nesto kao u PHP-u:
for($i=0;$i<10;$i++)
{
lokal$i=something;
}


Ne mozes, C# (a ni drugi CLI compliant jezici) nisu scripting jezici i objekti nisu dinamicki prosirivi. Kompajler mora da zna SVE lokalne promenljive zbog alokacije na steku i sve klase su immutable u trenutku izvrsenja.
Predlazem u jednostavnijoj varijanti koriscenje nizova, a u komplikovanijoj varijanti mozes da iskorsits reflection da napravis svoju dinamicku klasu (ali to je bas heavy i totalno neprakticno za vecinu primena)

[ Dragi Tata @ 01.09.2006. 17:18 ] @
Citat:
mmix: Ne mozes, C# (a ni drugi CLI compliant jezici) nisu scripting jezici i objekti nisu dinamicki prosirivi.


Proveri IronPython :)
[ gristic @ 02.09.2006. 07:08 ] @
Kako onda da zavisno od neke promenljive definisem odredjeni broj controla.
Na primer: ako je x=5 da definisem 5 razlicitih TextBox-ova?
Pri cemu unapred ne znam kolika je promenljiva x.
[ jablan @ 02.09.2006. 08:31 ] @
Code:

int n = 5;
ArrayList boxovi = new ArrayList();
for (int i = 0; i < n; i++) {
    TextBox tb = new TextBox();
    boxovi.Add(tb);
}
[ gristic @ 02.09.2006. 15:27 ] @
Hvala puno. To je resilo moj problem
[ mmix @ 05.09.2006. 02:49 ] @
Citat:
Dragi Tata: Proveri IronPython


Abomination
Al opet, sve je bolje od IDispatch2 Kad se samo setim da sam lud pokusavao da ga iskoristim iz C++-a (kakvo mucenje )

Hmm, nisam bas u toku sa pitonom, al zar je stvarno moguce da mutiras .NET klasu tokom runtime-a? Ako jeste, kako iskoristiti taj late binding pri konzumiranju asemblija (narocito iz drugih CLI jezika). Nesto mi nisu sve koze na broju ovde Ja koliko znam assembly metadata sadrzi definitivni contract sadrzanih klasa, dinamicke klase su cista jeres
[ Dragi Tata @ 05.09.2006. 13:02 ] @
Citat:
mmix: Hmm, nisam bas u toku sa pitonom, al zar je stvarno moguce da mutiras .NET klasu tokom runtime-a? Ako jeste, kako iskoristiti taj late binding pri konzumiranju asemblija (narocito iz drugih CLI jezika). Nesto mi nisu sve koze na broju ovde :) Ja koliko znam assembly metadata sadrzi definitivni contract sadrzanih klasa, dinamicke klase su cista jeres :)


U stvari, tip koji je napravio IronPython je želeo da dokaže kako je .NET loša platforma za dinamičke jezike, i onda je vremenom promenio mišljenje i sad radi za MS :)
CLR je zaista pravljen za static typing, ali kad pogledaš mehanizme kao što su refleksija i emit, vidiš da je u stvari moguće praviti i dinamičke jezike na .NET platformi. U stvari i VB.NET je moguće koristiti dinamički, mada obično nije preporučljivo: http://www.novetehnologije.com/Default.aspx?tabid=88

Ako te baš interesuje implementacija IronPython-a, možeš da skineš source ovde: http://www.codeplex.com/Source...ts.aspx?ProjectName=IronPython

Interesantno je da će IronPython izgleda da bude na listi "zvaničnih" MS jezika - sprema se i dodatak za VS.
[ mmix @ 05.09.2006. 14:41 ] @
Citat:
Dragi Tata: CLR je zaista pravljen za static typing, ali kad pogledaš mehanizme kao što su refleksija i emit, vidiš da je u stvari moguće praviti i dinamičke jezike na .NET platformi. U stvari i VB.NET je moguće koristiti dinamički, mada obično nije preporučljivo: http://www.novetehnologije.com/Default.aspx?tabid=88


To da, pravio sam ja svoje emitere da kreiram dinamicke klase bazirane na externoj shemi kako bi omogucio databinding iz dizajnera. Ali ono sto ja ne razumem je kako IronPython moze da promeni klasu jednom kad se emituje? Osnovna osobina scriptable jezika je da mogu u bilo kom trenutku u runtime-u da prosirim klasu i da npr dodam svoj metod. Cak i ako se implementira neka varijanta IDispatch2 interfejsa kako prevariti .NET kompajler da uopste pokusa da uradi LateBinding na drugoj .NET klasi (osim ako ne misle da ja svaki put castujem objekat u Object tip ?!?), ne vidim kako je ovo moguce bez promena na kompajleru, a sa druge strane ce takva promena na kompajleru spreciti strong type checking i otvoriti pandorinu kutiju runtime gresaka od kojih pate svi scriptable jezici...

Citat:
Dragi Tata:Interesantno je da će IronPython izgleda da bude na listi "zvaničnih" MS jezika - sprema se i dodatak za VS.


Yuck, al ako deca vole sto da ne...
[ Dragi Tata @ 05.09.2006. 15:27 ] @
Citat:
mmix: Yuck, al ako deca vole sto da ne... :)


Eh, ne treba biti isključiv :)

Za "produkcijski" kod, static typing je zaista jako dobra stvar, ali i skripte imaju svoju primenu.

Inače, od .NET jezika, do sad mi se najviše dopada Boo. Sintaksa Pythona, ali static typing.
[ mmix @ 06.09.2006. 13:17 ] @
Citat:
Dragi Tata: Eh, ne treba biti isključiv


Zezam se, python je ok, ja samo imam averziju prema scriptable jezicima, posto takve jezike svi tretiraju kao "lake" pa ih daju pocetnicima da rade i onda to na kraju zavrsi disfunkcionalno na mom spisku taskova. C# je bio blagoslov za mene, ako ni zbog cega drugog onda zbog strong type-inga sto je sprecavalo sampione da mi salju sintaksno/tipsko neispravan kad, ako .NET krene scriptable putem bice belaja.

Mada nista od ovog ne odgovara na moje pitanje, kako dinamicki prosiriti klasu/objekat jednom kad se publikuje Runtime kompajliranje i emitovanje koda je ok, ali to je ista prica kao i pre-compiled kod, samo je lokacija na kojoj sekompajlira drugacija...