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

Type restrikcija u method argumentu

[es] :: .NET :: Type restrikcija u method argumentu

[ Pregleda: 1908 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.8.*



+6 Profil

icon Type restrikcija u method argumentu09.10.2009. u 11:48 - pre 176 meseci
Da li je moguće ograničiti type argument metode, da bude samo na određenu klasu i njene derivate?

Radim nešto kao:

Code:

public void RegisterForSomeClassChangedEvent(SomeClass.ChangedEventHandler handler, Type settingsMemberType)


Prvi argument je naravno delegat, ali ovaj drugi - type, to me zanima može li se ograničiti samo na SomeClass i njene derivate ? Sve mi govori da naravno ne može, ali možda mi je samo mozak zablokirao :)


Znam da bi mogao nešto ovako:
Code:

public void RegisterForSomeClassChangedEvent<T>(SomeClass.ChangedEventHandler handler, T type) where T : SomeClass

ili
Code:

public void RegisterForSomeClassChangedEvent<T>(SomeClass.ChangedEventHandler handler) where T : SomeClass

pa da iskoristim typeof(T) kao type.

Edit: zanima me bez upotrebe generics-a ...

My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
82.117.202.*



+171 Profil

icon Re: Type restrikcija u method argumentu09.10.2009. u 11:57 - pre 176 meseci
Bez genericsa ja bih rekao ne. Type sistem se oslanja na type, kao sto i ime kaze , znaci ako kazes da sve sto je tipa type moze da bude parametar, onda je to bilo koji type.
 
Odgovor na temu

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.8.*



+6 Profil

icon Re: Type restrikcija u method argumentu09.10.2009. u 14:09 - pre 176 meseci
Ma da .. Statički, ne može se izvesti.. Ali moglo bi npr. pomoću PostSharp-a (ili Castle Dynamic Proxy-a direktno) da izbaci exception, ali to isto nije što želim ...
Uglavnom, i generics način radi zadovoljavajuće ...
My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
82.117.202.*



+171 Profil

icon Re: Type restrikcija u method argumentu09.10.2009. u 14:47 - pre 176 meseci
Ako se ne varam PostSharp je bio ekesperimentalni jezik, osnovao je bio C#, sada se to se pretocilo u CodeContracts tako da je on verovatno mrtav. Bacanja exceptiona kod ovakvih stvari onda totalno ubija smisao static typing-a, zato su tu generici, pa recimo i overloadi jer recimo preko overloada ti mozes staticki da odredjues flow strukturu.
 
Odgovor na temu

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.8.*



+6 Profil

icon Re: Type restrikcija u method argumentu09.10.2009. u 14:58 - pre 176 meseci
Pa da, zato sam i rekao da ne bi to da uradim... To je i razlog zašto nisam isprva odmah htio generics-e, jer nepotrebno komplikuju (dobro, i ne komplikuju, ali uvijek gledam da je što jednostavnije).

PostSharp je AOP (Aspect Oriented Programming) framework za .NET, ne znam baš da mislimo na isto?
http://www.postsharp.org/

Btw, CodeContracts, šta je tu mrtvo? (.NET 4.0 ? )


My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
82.117.202.*



+171 Profil

icon Re: Type restrikcija u method argumentu09.10.2009. u 15:05 - pre 176 meseci
Sorry, ja sam procitao sta sam mislio a ne sta pise.

Zamenio sam PostSharp sa Spec# koji je nastao kao eksperimentalni jezik, bas za ovakve stvari da se dodaju constraint-i u metodama, za njega sam mislio da je mrtav ne CodeContracts.

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Type restrikcija u method argumentu09.10.2009. u 16:37 - pre 176 meseci
A polimorfizam? Objekti nasledjene klase se polimorfno redukuju na baznu i implicitno prolaze typecheck.

Code:

public void RegisterForSomeClassChangedEvent(SomeClass.ChangedEventHandler handler, SomeType settingsMemberType)



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

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.8.*



+6 Profil

icon Re: Type restrikcija u method argumentu09.10.2009. u 16:48 - pre 176 meseci
@mmix:

Ovaj argument "SomeType", kako ću ga postaviti na išta drugo od Type? Šta ti je SomeType u ovom slučaju?

typeof(SomeClass) naravno ne radi kao vrsta argumenta.

Nije meni problem da neki objekti neće, a neki hoće. Problem je što želim ograničiti da odmah pri compile-time ne da ništa nego Type nekog objekta (i derivata). Možda ne kontam šta hoćeš da kažeš ...


My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.8.*



+6 Profil

icon Re: Type restrikcija u method argumentu09.10.2009. u 17:00 - pre 176 meseci
hmmmm ... mislim da sad kontam šta hoćeš reći, misliš na polimorfizam objekta, a ne tipa? Pa, ne želim prosljeđivati
new SomeObject()
nego samo tip...

Da je cijeli objekat, to je drugo, onda je jednostavno pozvati GetType()...
My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Type restrikcija u method argumentu09.10.2009. u 18:50 - pre 176 meseci
A ok, nismo se razumeli, sad kontam sta hoces a odgovor je da ne moze bar ne bez runtime provere i exceptiona sto pobija tvoj compile time zahtev, cak i jezici koji bi ti pruzili te konstrukcije moraju to da urade runtime jer CLI ne podrzava taj mehanizam u hederu metoda i ne postoji nacin da se to ogranicenje opise ILom. Problem je sto je settingsMemberType instanca tipa Type koja ne mora da dodje samo od typeof(SomeType) ili derivata, moze da dodje i iz drugih izvora (npr enumeracijom tipova u asembliju ili refleksijom remoting tipa), tako da kompajler ne moze da forsira bilo kakav check tokom prevodjenja.

Btw mene je i zbunilo tvoje prvo resenje (sa "T type" kao drugim parametrom) koji prosledjuje instancu T objekta ne Type-a, pa se to onda svodi na ovo sto sam ti ja dao.
Drugo generics resenje koje si dao je medjutim sasvim ok, ne bih ja bezao od toga, slican fazon se maksimalno koristi u LINQ-u i to radi sasvim ok i daje ti ono sto ti hoces.
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

[es] :: .NET :: Type restrikcija u method argumentu

[ Pregleda: 1908 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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