2012-06-08 2 views
0

очень основной вопрос думаю.Как написать функцию C# для добавления arg этого класса?

public class person { 
    public string name; 
    public int status; 
    public int ability; 

    public person() { } 
    public person(string name, int status, int ability) 
    { 
     this.name = name; 
     this.status = status; 
     this.ability = ability; 
    } 

    public static int praise() { 
     return ++status; 
    } 
} 

Я хочу написать класс с C#, у него есть функция, чтобы добавить каждый новый класс к своему статусу. но есть ошибка, потому что «статус» не является статичным. Как я могу решить эту проблему? Большое спасибо.

+1

Очевидный ответ заставил бы его статичным, будь то то, что вы хотите или нет, это другое дело. – RhysW

+0

Я думаю, вы должны сначала решить свой дизайн.похвала(), являющаяся статусом статических средств, будет общим достоянием всех людей, а не статусом одного человека. Если вы намереваетесь, чтобы это было для одного человека, вы, вероятно, не хотите, чтобы это не было статическим методом или статическим свойством. – jcxavier

ответ

0

Как получить статическое поле?

public static int status; 

Также стоит обратить внимание, что вы должны использовать свойства вместо открытых полей ...


Другое дело, вы установите status поле в конструкторе класса. Так что это очень сбивает с толку о роли поля status. Вы действительно хотите поделиться им между несколькими экземплярами или нет?

Если status поле не общие для всех ваших экземпляров, то ваш метод praise может взять коллекцию person в качестве параметра, и увеличивать их status один на один.

Возможно, вам следует уточнить свой вопрос.

+0

он делает this.status = ошибка состояния. – fisch

+0

это, вероятно, не то, что он хочет, это означает, что каждый человек имеет один и тот же статус, в отличие от того, чтобы каждый человек имел свой собственный статус. –

+0

@ Ханс, да см. Обновленный вопрос. На самом деле это не совсем понятно. – ken2k

1

Удалить модификатор static из объявления методы:

public int praise() { 
    return ++status; 
} 
0

Вы не можете ссылаться на нестатическое поле в статическом контексте. Вы можете сделать его статическим, но это зависит от вашего дизайна.

+3

'Вы не можете ссылаться на статическое поле в нестационарном контенсе, да, вы можете, это в обратном направлении. Вы не можете получить доступ к нестатическому полю в статическом контексте. – vcsjones

+0

@vcsjones: Да, это правильно. Я только пил около унции кофе, поэтому мой мозг все еще только частично функциональен;) –

5

Похоже, вы пытаетесь сделать praise() приращением статуса конкретного человека, а это значит, что он не должен быть статическим методом.

public int praise() { 
    return ++status; 
} 

назвать это вы

Person bob("bob", 0, 0); 
bob.praise(); 
+0

спасибо, правильно! – fisch

1

Проблема заключается в том, что вы пытаетесь, чтобы увеличить переменную-член в статическом методе. Я предполагаю, что вы не хотите, чтобы метод praise() был статичным. Если это так, то вы можете просто изменить метод похвала() к:

public int praise() 
{ 
    return ++status; 
} 
1

Вы, вероятно, хотите

public int praise(){ 
    return ++status; 
} 
1

это зависит от того, что вы пытаетесь для того чтобы достигнуть.

если вы сделаете status статических все экземпляры вашего класса будет один и тем же переменным состояния:

public static int status; 

, если вы не сделаете это статическим каждый экземпляр вашего класса будет иметь свой собственный status переменной

public int praise() { 
    return ++status; 
} 
Смежные вопросы