Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Anonimni metodi kao clanovi anonimnih tipova

[es] :: .NET :: Anonimni metodi kao clanovi anonimnih tipova

[ Pregleda: 2039 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Anonimni metodi kao clanovi anonimnih tipova21.06.2012. u 15:23 - pre 144 meseci
Da li je poznato nekom, postoji li neki smislen razlog zasto nisu omogucili nesto ovako?

Code (csharp):

var x = new { a = "a", b = () => { Console.WriteLine("b"); } };
 



Moze se izvesti vrlo slicna stvar sa:
Code (csharp):

var x = new { a = "a", b = new Action(() => { Console.WriteLine("b"); } };
 


Ali nije to to :)
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova21.06.2012. u 15:34 - pre 144 meseci
Tj. mala izmena. Kapiram da bi i kada bi moglo ono prvo to opet bio property tipa Delegate (ili MulticastDelegate) a ne bi bio metod.
Tako bar ispadne kad uradim:

Code (csharp):

delegate void d();
static void Main(string[] args)
{
     d test = () => { Console.WriteLine("test"); };
     var x = new { a = "a", b = test };
}



Zbog toga, pitanje bi pre trebalo glasiti, zasto nije moguce:
Code (csharp):

var x = new (a = "a", void b() { Console.WriteLine("b"); });
 

 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
82.117.199.*

Sajt: www.dcaric.com


+26 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova21.06.2012. u 16:14 - pre 144 meseci
http://blogs.msdn.com/b/ericlippert/contact.aspx

:)

http://stackoverflow.com/quest...ssigned-to-var/4966409#4966409

[Ovu poruku je menjao Dejan Carić dana 21.06.2012. u 17:27 GMT+1]
 
Odgovor na temu

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
*.dynamic.sbb.rs.



+8 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova21.06.2012. u 17:05 - pre 144 meseci
Već je odgovorio. ;)

http://stackoverflow.com/quest...ssigned-to-var/4966409#4966409
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova21.06.2012. u 17:46 - pre 144 meseci
OK, shvatio sam i ja da ne moze da skapira koji je tip, otud ona druga poruka. I dalje mi nije jasno zasto nisu dozvolili nesto kao ono u mom poslednjem kodu. Takodje, imho, trebalo je i da dozvole odredjivanje tipa clana (string a = "a" umesto samo a = "a" u primeru koji sam dao).
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova21.06.2012. u 21:22 - pre 144 meseci
Za to sto void b() nije delegat vec method implementation, kompajler moze da wrapuje metod impl u delegat kroz lambdu ili cak kroz dodelu u unapred poznati tip delegata ali ako se tip delegata ne zna onda se opet postavlja pitanje u koji delegat
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova21.06.2012. u 21:34 - pre 144 meseci
Citat:
mmix: Za to sto void b() nije delegat vec method implementation

Pa da, i upravo method implementation i hocu a ne delegat. Tj. "hocu". Nije da mi ovo treba za nesto konkretno, nego mi palo na pamet i ono.. razmisljam zasto nisu napravili da to moze. Ne vidim neki razlog protiv (osim "moze sa delegatom pa nas mrzelo da pravimo i podrsku za prave funkcije" ).
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.dynamic.isp.telekom.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova21.06.2012. u 23:42 - pre 144 meseci
Postoje dva tipa podataka koja možeš da koristiš kako property-e klase: value types i reference types.
Kada instanciraš klasu:
- možeš da dodeliš vrednost property-ima
- vrednost tih property-a se čuva negde

Odgovor na tvoje pitanje:
Delegat je referentni tip. Možeš da mu dodeliš vrednost koja će biti sačuvana negde u memoriji.
Kao što je Miljan rekao, void b() nije delegat već method implementation, tj. nije tip podataka (ne možeš da dodeliš vrednost, rezultat se ne čuva u memoriji).
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova22.06.2012. u 00:50 - pre 144 meseci
Aaa, ok, sad kontam sta hoces, ti hoces da deklarises anonimnu klasu ali tako da sadrzi metode pored propertya. U teoriji mehanizam bi mogao da radi (ionako je implementacija takva da je a property sa private getterom, koji je zapravo glorifikovani metod).

Hmm, jedino ogranicenje koje vidim je sintaksa inicijalizatora

[Ovu poruku je menjao mmix dana 22.06.2012. u 02:03 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova22.06.2012. u 08:07 - pre 144 meseci
Dejane, shvatam ja to, pogledaj moju drugu poruku sa pocetka teme. Method implementation je zapravo prva stvar koju sam ja probao kada sam eksperimentisao pa sam posle dosao do delegata i onda pogresno to stavi ou prvu poruku.

Mmix, upravo tako. Stavise, ja bih dozvolio kompletnu definiciju klase kao kada pises "obicnu" klasu. Nesto kao:
Code (csharp):

var x = new
{
     private int a = 2;
     private int _b = 3;

     public int b { get { return _b; } }

     public bool IsBGraterThanA() { return (b > a); }
}
 


Mislim da bi CLR mogao to da svari i da je jedini razlog sto ne moze sto eto nisu dodali u sintaksu i kompajler.
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.dynamic.isp.telekom.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova22.06.2012. u 10:26 - pre 144 meseci
Sorry, nisam dobro pročitao tvoju poslednju poruku :(

Citat:
Shadowed:razmisljam zasto nisu napravili da to moze. Ne vidim neki razlog protiv (osim "moze sa delegatom pa nas mrzelo da pravimo i podrsku za prave funkcije" :)).

Ovde je više stvar dizajna nego implementacije. Anonimni tipovi su dizajnirani kao privremeni objekti. Čak su im i svi property-i read-only.
Video sam da se koriste samo kada LINQ-om protrčiš kroz neku kolekciju, a dobijeni rezultat ispisuješ negde. Pa da ne bi pravio posebnu klasu koja predstavlja jedan item, jer ti treba samo privremeno (nećeš da ga keširaš ili pošalješ drugoj klasi/metodi), ti lepo napraviš anonimni tip i dobiješ intellisense podršku kod ispisa :)
Ili kada u MVC-u trebaš da vratiš JSON.

Sa implementacione strane gledišta, metoda bi mogla da se ugura u anonimni tip, ali koja je svrha/primena toga?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova22.06.2012. u 15:13 - pre 144 meseci
postoji moguca primena sa .NET4.0 i dynamic. Instanca anonymous tipa moze da se vrati kroz dynamic i onda njen metod moze da se pozove kroz runtime binding, jeza me prolazi od toga ali je moguce

Shadowed, ja licno mislim da su oni bili u fazonu, ako ti treba quick readonly container za neki short task onda anonymous type da ne moras da se smaras sa pravljenjem klasa, ako je u pitanju instanca sa funkcionalnom implementacijom onda napravi klasu LINQ podrzava inicijalizaciju deklarisanih klasa tako da nista posebno ne bi dobio sa ovim sem one grozote iz prve recenice Mozda ljudi jednostavno nisu zeleli da se C# pretvori u javascript
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Anonimni metodi kao clanovi anonimnih tipova22.06.2012. u 22:19 - pre 144 meseci
Meni je to najvise do kompletnosti. Ovako mi nekako izgleda polovicno uradjeno :) Jeste, znam, pomalo sam Monk :)

Citat:
mmix: Mozda ljudi jednostavno nisu zeleli da se C# pretvori u javascript :)

Uh, sad si me podsetio nekih stvari od pre 3god... Doduse, bio je ActionScript, al' dodje mu na isto. Mozda ipak bolje sto nema jer nekad moras da radis sa tudjim kodom... A sampiona nikad ne manjka...
 
Odgovor na temu

[es] :: .NET :: Anonimni metodi kao clanovi anonimnih tipova

[ Pregleda: 2039 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.