[C#] Surcharge accesseur SET

Surcharge accesseur SET [C#] - C#/.NET managed - Programmation

Marsh Posté le 30-03-2009 à 16:29:40    

Bonjour,
 
Je souhaites effectuer la surcharge de mon accesseur SET.
 
En gros, si un string est passé en paramètre, j'effectue une certaine action ( ici, je créé une nouvelle instance de la classe MailAdress puis je l'assigne) ou si c'est une instance de MailAdress, je l'assigne directement.
 
De la surcharge de méthode classique quoi.
 
Le problème, c'est que le code n°1 me lance une erreur de compilation (Erreur 2 Le type 'CoreNet.Common.WebElement.MailStyle' contient déjà une définition pour 'From') et le code n°2 se compile bien ce qui est normal.
 
 

Code :
  1. public string From
  2.         {
  3.             set
  4.             {
  5.                 base.From = new MailAddress(value);
  6.             }
  7.         }
  8.         public MailAddress From
  9.         {
  10.             set { base.From = value;); }
  11.         }


 
Ce qui finalement reviendrait à ça :
 

Code :
  1. public void SetFrom(string Mail)
  2.         {
  3.          
  4.                 base.From = new MailAddress(Mail);
  5.          
  6.         }
  7.         public void SetFrom(MailAddress Mail)
  8.         {
  9.             base.From = Mail;);
  10.         }


 
C# à implémenter cette syntaxe pour remplacer les méthodes SetXXXX de Java, JAVA qui permet donc la surcharge du SET d'une propriété, je ne comprend pas pourquoi ce ne serait pas possible en C#
 
Comment faire ?
 
Merci les rois du code :o

Reply

Marsh Posté le 30-03-2009 à 16:29:40   

Reply

Marsh Posté le 30-03-2009 à 17:02:56    


C'est pas possible parce que c'est 1. stupide et 2. pas le use case. Une property, c'est une property, c'est équivalent à une variable membre avec potentiellement de la logique applicative derrière. Si tu veux surcharger des méthodes tu utilises des méthodes.

Message cité 1 fois
Message édité par masklinn le 30-03-2009 à 17:04:14

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-03-2009 à 17:13:29    

masklinn a écrit :


C'est pas possible parce que c'est 1. stupide et 2. pas le use case. Une property, c'est une property, c'est équivalent à une variable membre avec potentiellement de la logique applicative derrière. Si tu veux surcharger des méthodes tu utilises des méthodes.


 
 [:cosmoschtroumpf]

Reply

Marsh Posté le 30-03-2009 à 17:27:58    

pourquoi surcharger  string From si il fait la meme chose que la classe mère?

Message cité 1 fois
Message édité par ov3rflow le 30-03-2009 à 17:29:49
Reply

Marsh Posté le 30-03-2009 à 17:38:41    

ov3rflow a écrit :

pourquoi surcharger  string From si il fait la meme chose que la classe mère?


Pour pas avoir à le wrapper manuellement


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-03-2009 à 20:49:21    

quand je vois les spec de .NET 3.5 et bientôt de 4.0, ça n'a effectivement aucun intéret de vouloir surcharger le type d'une propriété.  
A proscrire donc. JAVA gère cela différemment oui, ce qui est un avantage dans ce cas la, mais est un gros inconvénient en terme de lisibilité de code.


---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Marsh Posté le 30-03-2009 à 20:50:21    

moi23372 a écrit :

JAVA gère cela différemment oui


Java ne gère pas du tout le cas :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-03-2009 à 21:01:59    

masklinn a écrit :


Java ne gère pas du tout le cas :o


 
Il permet de surcharger les méthodes, pas d'en modifier le type de retour. Comme dans tout langage, pour surcharger une méthode, il faut que les types en entrée soit différent.


---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Marsh Posté le 30-03-2009 à 21:04:40    

moi23372 a écrit :

Il permet de surcharger les méthodes, pas d'en modifier le type de retour.


Oui mais il n'a pas de propriétés, donc pas de surcharge de propriétés [:classe++]

moi23372 a écrit :

Comme dans tout langage, pour surcharger une méthode, il faut que les types en entrée soit différent.


Oui et non, Haskell permet de surcharger sur le retour d'une fonction d'une typeclass. Exemple: read :: Read a => String -> a

Prelude> let v = read "42" :: Int
Prelude> :t v
v :: Int
Prelude> let w = read "42" :: Float
Prelude> : t w
w :: Float
Prelude> let x = read "42" :: Data.Word.Word8
Prelude> :t x
x :: GHC.Word.Word8
Prelude> let y = read "(42, 42)" :: (Int, Data.Word.Word)
Prelude> :t y
y :: (Int, GHC.Word.Word)


Message édité par masklinn le 30-03-2009 à 21:16:37

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed