Для методов получения и установки (вещи, которые их используют, называются свойствами), это просто удобный и приятный способ заставить людей думать, что они используют переменную, но выполнять некоторые вычисления, когда переменная обновляется или к ней обращаются. , Например:
BankAccount.Interest
выглядит лучше, чем
BankAccount.GetInterest()
Даже если вы можете рассчитать проценты в тот момент, когда они запрашиваются, в обоих случаях.
Они также используются, чтобы сделать переменную доступной вне класса, но изменяемой только из класса с помощью этой техники:
public double Interest {
get;
private set;
}
В качестве примера используемого установщика, если вы когда-либо использовали Windows Forms и обновляли свойство Height
или Width
элемента управления, вы используете установщик. Хотя похоже, что вы используете обычную переменную экземпляра, такую как c.Height = 400
, вы действительно позволяете c
обновить ее позицию, перерисовав в новом месте. Поэтому сеттеры уведомляют вас точно, когда изменяется переменная, так что ваш класс может обновлять другие вещи на основе нового значения.
Еще одно применение свойств заключается в том, что вы можете проверить значение, которое люди пытаются установить для свойства. Например, если вы хотите сохранить процентную ставку для каждого банковского счета, но не хотите, чтобы отрицательные числа или числа превышали 50, вы просто используете установщик:
private int _interestRate = someDefault;
public int InterestRate {
get { return _interestRate; }
set {
if (value < 0 || value > 50)
throw new SomeException(); // or just don't update _interestRate
_interestRate = value;
}
}
Таким образом, люди не могут устанавливать публичные значения в недопустимые значения.
<ч />
По второму вопросу вы можете сделать одну из двух вещей в зависимости от того, что вы пытаетесь сделать.
Один : Вы можете сделать этого участника static
. Это означает, что только один из них существует для всего класса, а не один на экземпляр класса. Тогда вы можете получить к нему доступ ClassName.MemberName
.
Вы можете сделать это следующим образом:
// inside the BaseCharacter class definition:
public static SomeStruct[] Attributes = new SomeStruct[size];
// then to use it somewhere else in your code, do something with
BaseCharacter.Attributes[index]
Два : Вы должны создать экземпляр класса и получить к нему доступ через массив. Это означает, что каждый объект будет иметь свой отдельный массив.
Вы бы сделали это так:
BaseCharacter bc = new BaseCharacter();
// use bc.Attributes
Второй - это, вероятно, то, что вы захотите сделать, так как вы, вероятно, захотите изменить атрибуты каждого персонажа отдельно от всех других персонажей.