#c#
#c#
Вопрос:
Я создаю клиент для WebRequestTool, который содержит токен, который используется на протяжении всего срока службы каждого объекта, но уникален для каждой сущности класса. Поскольку я не хочу, чтобы это значение можно было изменять после создания объекта, я бы хотел, чтобы оно было постоянным.
Я уже пробовал использовать внутренний setMethod, который вызывается из конструктора, например :
internal void setToken(string token)
{
this.TOKEN = token;
}
Я также пытался просто присвоить его внутри конструктора. Это тоже не работает.
public class Client
{
const TOKEN;
public client(string token)
{
this.TOKEN = token;
}
}
Действительно ли нет другого способа присвоения константы, кроме ее жесткого кодирования при объявлении? И если есть, то что это?
Комментарии:
1. Как насчет использования
readonly
?2. Ох. Я не знал об этом, поскольку я довольно новичок в этом.
Ответ №1:
Из документации:
Поле const может быть инициализировано только при объявлении поля
Возможно, вместо этого вы захотите использовать только для чтения:
Поле, доступное только для чтения, может быть инициализировано либо при объявлении, либо в конструкторе. Следовательно, поля, доступные только для чтения, могут иметь разные значения в зависимости от используемого конструктора
Еще один приятный ресурс: Разница между ключевыми словами readonly и const в C #
Комментарии:
1. Есть ли способ сделать все это с помощью функции Set? Поскольку доступно только для чтения, также, похоже, доступно для записи только из конструктора.
2. @ArtisticAligator — как из установщика? В вашем случае вы не знаете, когда хотите его инициализировать, но хотите только один раз?
3. Нет, это было бы не из-за времени, которое я хочу его установить, а из-за сохранения понятного размера конструктора.
4. @ArtisticAligator что вы подразумеваете под «сохранением понятного размера конструктора»?
5. @ArtisticAligator — если он большой, то, вероятно, выполняет слишком много. Подумайте, могли бы вы использовать несколько ctors, где один вызывает другой. Если нет, то вы могли бы также создать некоторые частные функции и вызывать их из ctor. Тем не менее, я бы сказал, что если ctor делает так много, он, вероятно, делает то, чего не должен
Ответ №2:
Вы можете insted объявить его закрытым только для чтения
public class Client
{
private readonly string _token;
public Client(string token)
{
_token = token;
}
}
Поля, доступные только для чтения, не могут быть изменены после их установки и могут быть установлены в конструкторе.