1

Comment on fait pour ajouter une méthode perso à une classe (par exemple String) sans avoir besoin de créer une nouvelle classe (un peu comme en javascript) ?

(bien sûr, sans aller dans les sources de la classe ni utiliser le mot clé partial )
Tout ce qui passe pas par le port 80, c'est de la triche.

2

je crois qu'on peut pas faire ca, js et ruby sont les seuls languages a ma connaissance ou on peut faire ca reellement, non?

3

Si.

"Extension methods" dans http://www.15seconds.com/issue/060713.htm
Tout ce qui passe pas par le port 80, c'est de la triche.

4

java doit pouvoir faire ça aussi.

mais ça sert à quoi?

5

a petter un bon design en 2 sec wink

6

ou alors a alleger le design smile

7

+1 pour petter un bon design.

8

ca l'ajoute pas à l'execution hein... (contrairement aux langages interpretés)
sinon l'interêt est effectivement pas évident à voir pour les novices. Ils disent pourquoi ils ont fait ça dans le lien que j'ai filé.
Tout ce qui passe pas par le port 80, c'est de la triche.

9

C'est actuellement en débat pour savoir si ça doit être intégré à Java 7 et pour le moment, ca semble mal parti car beaucoup de gens sont contre.
avatar

10

onur > C'est pas un problème de langage interprété ou non en fait, il faut savoir que le modèle objet à classes de Java n'est pas le seul.
Celui de js ou python est un modèle objet à prototypes (on appelle parfois ça duck typing), celui d'ocaml est à polymorphisme de rangées, etc.

C'est un non sens de dire "péter un bon design". C'est juste que ça ne s'intègre pas dans les principes de conception pour le modèle à classes, mais c'est une opération essentielle dans le modèle à prototypes par exemple.
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

11

Je suis d'accord avec toi. Je voulais dire qu'on ajotue pas la méthode en plein milieu de l'execution, c'est pour ça que j'ai parlé de interpreté/compilé
Tout ce qui passe pas par le port 80, c'est de la triche.

12

Sauf erreur de ma part tu peux définir un type dynamique en .NET, mais comme ça donnerait un type dynamique dans un langage à typage fort tel que C#...
Bah je vois pas bien ce que tu pourrais en faire ^^
Quoi qu'il en soit tu ne peux pas modifier un type déjà existant sous .NET, mais ça ne t'empêche pas de créer tes propres méthodes qui agissent sur les objets, et vu qu'au niveau des appels ça revient exactement a un appel de méthode d'objet... Bah pourquoi se priver des méthodes d'extension tongue
Sinon il y a un autre truc super pour bidouiller les objets dynamiquement, c'est les méthodes dynamiques (love) mais bon... ^^
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

13

BookeldOr (./10) :
onur > C'est pas un problème de langage interprété ou non en fait, il faut savoir que le modèle objet à classes de Java n'est pas le seul.
Celui de js ou python est un modèle objet à prototypes (on appelle parfois ça duck typing), celui d'ocaml est à polymorphisme de rangées, etc.

C'est un non sens de dire "péter un bon design". C'est juste que ça ne s'intègre pas dans les principes de conception pour le modèle à classes, mais c'est une opération essentielle dans le modèle à prototypes par exemple.

essentiel? non je ne vois pas.

14

Oo... Ben heu, c'est juste la seule possibilité de créer des méthodes pour le programmeur dans un langage à prototypes (à part utiliser des prototypes prédéfinis comme object ou string).
Ou alors je ne comprends pas ta remarque.
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

15

Je ne suis pas certain que les méthodes d'extensions puisses "péter un bon design", car si j'ai bien compris, elle n'ont pas accès aux membres privés de la classe qu'elles étendent...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

16

Oui, j'allais dire ça. Ca évite juste de faire des méthodes statiques ailleurs et qui prennent en parametre un objet qu'on veut justement "étendre".
Tout ce qui passe pas par le port 80, c'est de la triche.