C# Traduction de l'AS au C#

Inscrit
19 Mai 2013
Messages
68
Reactions
0
#1
Salut tout le monde !

Je viens à vous aujourd'hui car je rencontre un problème au niveau de la traduction d'une classe de D. de l'AS au C#. En effet, dans la classe RSAKey, je rencontre le constructeur suivant :

Code:
      public function RSAKey(param1:BigInteger, param2:int, param3:BigInteger=null, param4:BigInteger=null, param5:BigInteger=null, param6:BigInteger=null, param7:BigInteger=null, param8:BigInteger=null)
Je me demande donc ce qu'est ce "=null", si c'est un paramètre ou non, et donc si ce constructeur comporte 2 ou 8 paramètres.

De plus, un peu plus loin dans le code, je peux remarquer ceci :

Code:
return new RSAKey(new BigInteger(param1, 16, true), parseInt(param2,16));

//

return new RSAKey(new BigInteger(param1, 16, true), parseInt(param2, 16), new BigInteger(param3, 16, true));
           
//

         return new RSAKey(new BigInteger(param1,16,true), parseInt(param2,16), new BigInteger(param3,16,true), new BigInteger(param4,16,true), new BigInteger(param5,16,true), new BigInteger(param6,16,true), new BigInteger(param7,16,true), new BigInteger(param8,16,true));
Le constructeur admet donc 2 paramètres, 3 paramètres, puis 8. Que cela signifie ? Comment faire en C# ?

Merci d'avance, Veriditas ! (j'espère avoir été assez clair sur le problème rencontré) :)
 

Kyu

Staff
Membre du personnel
Inscrit
4 Octobre 2009
Messages
327
Reactions
8
#2
Les "= null" indiquent que ces paramètres sont optionnels et ont pour valeur par défaut dans le cas où ils ne sont pas passé, "null".
"null" représente la non assignation de valeur.

Les méthodes possèdent une signature (composée de leur niveau d'accès (public ou private), d'éventuels modificateurs (abstract), de la valeur retournée, de leur nom et de leurs paramètres. Ce qui fait que tu peux avoir plusieurs méthodes avec le même nom mais des signatures différentes.
On appelle surcharge le fait d'avoir plusieurs méthodes du même nom mais avec des signatures différentes.

La surcharge s'applique également aux constructeurs.
Donc tu peux avoir 3 constructeurs pour les 3 cas de figures.
Code:
public RSAKey(BigInteger param1, int param2)
{
}

public RSAKey(BigInteger param1, int param2, BigInteger param3)
{
}

public RSAKey(BigInteger param1, int param2, BigInteger param3, BigInteger param4, BigInteger param5, BigInteger param6, BigInteger param7, BigInteger param8);
{
}
En java, pour éviter d'avoir du code dupliqué entre chaque constructeur, tu peut appeler les constructeurs de la classe courante, ce qui donne
Code:
public RSAKey(BigInteger param1, int param2)
{
    this(param1, param2, null, null, null, null, null, null);
}

public RSAKey(BigInteger param1, int param2, BigInteger param3)
{
    this(param1, param2, param3, null, null, null, null, null);
}

public RSAKey(BigInteger param1, int param2, BigInteger param3, BigInteger param4, BigInteger param5, BigInteger param6, BigInteger param7, BigInteger param8);
{
   // Traitement normal des paramètres
}
A voir si c'est possible en C#.
 
Inscrit
19 Mai 2013
Messages
68
Reactions
0
#3
J'ai trouvé la solution, merci !

Effectivement, il s'agit de paramètres facultatifs, et la traduction en C# est toute bête :


Code:
public RSAKey(BigInteger param1, int param2, BigInteger param3 = null, BigInteger param4 = null, BigInteger param5 = null, BigInteger param6 = null, BigInteger param7 = null, BigInteger param8 = null)
Ainsi, les param3 à 8 seront facultatifs. Attention ! Pour un int, il faut faire "= 0", pour un string "= """ et pour un bool "= false". :)
 

Kyu

Staff
Membre du personnel
Inscrit
4 Octobre 2009
Messages
327
Reactions
8
#4
C'est pas des valeurs aléatoires mais par défaut.
 

Geraff

Administrateur
Membre du personnel
Inscrit
13 Mars 2008
Messages
564
Reactions
0
#5
C'est de paramètres optionnels.
 
Inscrit
19 Mai 2013
Messages
68
Reactions
0
#6
Oui voilà, des paramètres optionnels. Je m'étais mal exprimé et ai corrigé l'erreur ;) Mais là, je me retrouve face au problème que l'on ne peut pas associer de null au BigInteger (de System.Numerics). Comment les mettre en paramètres optionnels alors ?
 

Kyu

Staff
Membre du personnel
Inscrit
4 Octobre 2009
Messages
327
Reactions
8
#7
BigInteger var = 0
 
Inscrit
19 Mai 2013
Messages
68
Reactions
0
#8
0 ne fonctinne pas, en fait, il faut faire BigInteger var = new BigInteger() pour que le paramètre BigInteger soit facultatif ! :)
 
Haut Bas