J'ai un programme où j'utilise les paramètres d'un magasin de classe. J'en ai besoin pour utiliser les fonctions set et get pour modifier et stocker les paramètres. J'ai essayé cela et je ne le fais pas fonctionner. Quelqu'un peut-il m'aider avec celui-ci?
private enum _Difficulty { Easy, Normal, Hard };
public void SetDifficulty(Difficulty)
{
_Difficulty = Difficulty;
}
public enum GetDifficulty()
{
return _Difficulty;
}
N'y a-t-il aucun moyen d'utiliser enums
dans une classe avec get
et set
?
J'ai également besoin de cela avec bool
et int
.
Il y a plusieurs problèmes ici:
SetDifficulty
a un paramètre juste Difficulty
- est-ce censé être le nom ou le type du paramètre?SetDifficulty
essaie de définir type plutôt qu'un champGetDifficulty
essaie d'utiliser enum
comme type de retour, puis renvoie un type plutôt qu'un champFondamentalement, vous semblez confus sur ce que votre déclaration enum
déclare - ce n'est pas déclarer un champ, c'est déclarer un type (et spécifier ce que le nom les valeurs de ce type sont).
Je suppose que tu veux:
// Try not to use nested types unless there's a clear benefit.
public enum Difficulty { Easy, Normal, Hard }
public class Foo
{
// Declares a property of *type* Difficulty, and with a *name* of Difficulty
public Difficulty Difficulty { get; set; }
}
Vous pouvez utiliser les méthodes get/set si vous voulez vraiment faire ressembler votre code à Java au lieu de C #:
public enum Difficulty { Easy, Normal, Hard }
public class Foo
{
private Difficulty difficulty;
public void SetDifficulty(Difficulty value)
{
difficulty = value;
}
public Difficulty GetDifficulty()
{
return difficulty;
}
}
Votre code essaie d'affecter une valeur à Difficulty
, alors qu'en fait Difficulty
est le nom du type enum
. J'encouragerais plutôt l'utilisation de getters et setters comme propriétés:
public enum Difficulty { Easy, Normal, Hard };
private Difficulty _difficulty;
public Difficulty CurrentDifficulty
{
get { return _difficulty; }
set { _difficulty = value; }
}
De cette façon, vous pouvez ajouter du code supplémentaire dans le setter pour des conditions spéciales. Pour l'utiliser, il vous suffit de procéder comme suit:
//set
CurrentDifficulty = Difficulty.Easy;
//get
Difficulty theDifficulty = CurrentDifficulty;
L'énumération que vous souhaitez utiliser doit être publique. Vous avez également besoin d'une instance de cette énumération pour stocker la valeur que vous définissez, vous la définissez actuellement dans la déclaration de votre énumération. Ensuite, vous souhaitez utiliser le même type d'énumération pour ce que votre classe stocke et ce que vous transmettez.
public enum Difficulty { Easy, Normal, Hard };
public Difficulty { get; set; }
Une fois que vous spécifiez une énumération à l'aide du mot clé enum
, cette énumération agit comme un type, comme le feraient class
ou struct
.
Voici comment implémenter une propriété avec une énumération personnalisée:
public enum _Difficulty { Easy, Normal, Hard };
public _Difficulty Difficulty { get; set; }
Il y a un certain nombre de problèmes ici:
enum
est privé, donc rien ne pourra appeler SetDifficulty
pour lui fournir une valeur à partir de ce enum
. En effet, le compilateur ne le permettra pas.SetDifficulty
n'est qu'un type, il a également besoin d'un nom de variable. Également une erreur de compilation.Il ressemble vous voulez faire ceci:
public enum Difficulty { Easy, Normal, Hard }
public Difficulty DifficultySetting { get; set; }
Notez que j'ai dû changer le nom de la propriété en DifficultySetting
car cela entre en conflit avec le nom de l'énumération. Le vôtre a utilisé un trait de soulignement, qui résoudrait également ce problème. Cependant, j'ai toujours trouvé que les traits de soulignement sont pour les membres privés et si vous voulez que le code de consommation utilise ce enum
alors il devrait être public. Décorer un membre public avec des choses comme des traits de soulignement distrait de la sémantique du nom lui-même. Dans tous les cas, la sémantique dépend de vos préférences personnelles, vous pouvez donc modifier ces noms comme bon vous semble.
Je ne suis pas sûr que vous les utilisiez correctement. Cela pourrait aider ...
private enum Difficulty { Easy, Normal, Hard };
private Diffuculty theDifficulty;
public void SetDifficulty(difficulty d)
{
theDifficulty = difficulty;
}
public Difficulty GetDifficulty()
{
return theDifficulty;
}
Une énumération est un type pas un variable. Quelque chose comme ça fonctionnerait:
public enum Difficulty { Easy, Normal, Hard };
private Difficulty _Difficulty;
public void SetDifficulty(Difficulty difficulty )
{
_Difficulty = Difficulty;
}
public Difficulty GetDifficulty()
{
return _Difficulty;
}
ou plus succinctement en tant que propriété:
private Difficulty Difficulty {get; set;}
Notez que l'énumération doit être public
si vous voulez qu'elle soit accessible à partir des méthodes publiques.