C # “doit déclarer un corps car il n’est pas marqué abstrait, externe ou partiel”

Je ne suis pas sûr pourquoi je reçois cette erreur pour être honnête.

private int hour { get; set { //make sure hour is positive if (value < MIN_HOUR) { hour = 0; MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(), "Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { //take the modulus to ensure always less than 24 hours //works even if the value is already within range, or value equal to 24 hour = value % MAX_HOUR; } } } 

J’ai aussi essayé de faire une propriété réelle:

 public int hour { get; set { //make sure hour is positive if (value < MIN_HOUR) { hour = 0; MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(), "Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { //take the modulus to ensure always less than 24 hours //works even if the value is already within range, or value equal to 24 hour = value % MAX_HOUR; } } } 

Suggestions?

Essaye ça:

 private int hour; public int Hour { get { return hour; } set { //make sure hour is positive if (value < MIN_HOUR) { hour = 0; MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(), "Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { //take the modulus to ensure always less than 24 hours //works even if the value is already within range, or value equal to 24 hour = value % MAX_HOUR; } } } 

Vous devez fournir un corps pour le get; partie aussi bien que l’ set; partie de la propriété.

Je pense que vous voulez que ce soit:

 private int _hour; // backing field private int Hour { get { return _hour; } set { //make sure hour is positive if (value < MIN_HOUR) { _hour = 0; MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(), "Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { //take the modulus to ensure always less than 24 hours //works even if the value is already within range, or value equal to 24 _hour = value % MAX_HOUR; } } } 

Cela étant dit, j'envisagerais aussi de simplifier ce code. Il est probablement préférable d'utiliser des exceptions plutôt qu'un MessageBox dans votre setter de propriétés pour les entrées non valides, car cela ne vous liera pas à une structure d'interface utilisateur spécifique.

Si cela ne convient pas, je vous recommande de convertir cela en une méthode plutôt que d'utiliser un setter de propriétés. Cela est particulièrement vrai car les propriétés ont une attente implicite d'être "léger" - et afficher un MessageBox à l'utilisateur viole vraiment cette attente.

Vous ne pouvez pas fournir votre propre implémentation pour le setter lors de l’utilisation des propriétés automatiques. En d’autres termes, vous devriez soit faire:

 public int Hour { get;set;} // Automatic property, no implementation 

ou fournissez votre propre implémentation à la fois pour le getter et le setter, ce que vous voulez juger d’après votre exemple:

 public int Hour { get { return hour; } set { if (value < MIN_HOUR) { hour = 0; MessageBox.Show("Hour value " + value.ToString() + " cannot be negative. Reset to " + MIN_HOUR.ToString(), "Invalid Hour", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { //take the modulus to ensure always less than 24 hours //works even if the value is already within range, or value equal to 24 hour = value % MAX_HOUR; } } } 

Vous devez soit fournir un corps à la fois pour le getter et le setter, soit ni l’un ni l’autre. Comme vous avez une logique non sortingviale dans votre setter, vous avez besoin d’un getter implémenté manuellement comme ceci:

 get { return _hour; } 

Si vous décidez que vous n’avez pas besoin de la logique dans le setter, vous pouvez utiliser une propriété implémentée automatiquement comme ceci:

 public int Hour { get; set; } 

Vous n’avez pas à fournir un corps pour les getters et les setters SI vous souhaitez que le compilateur automatisé fournisse une implémentation de base.

Cela vous oblige cependant à vous assurer que vous utilisez le compilateur v3.5 en mettant à jour votre fichier web.config à quelque chose comme

        

Vous pouvez simplement utiliser la valeur clé pour accomplir ceci.

 public int Hour { get{ // Do some logic if you want //return some custom stuff based on logic // or just return the value return value; }; set { // Do some logic stuff if(value < MINVALUE){ this.Hour = 0; } else { // Or just set the value this.Hour = value; } } }