Похоже, что «наблюдать» должно быть «телом», а не «ответом» в определении вашего интерфейса.
в C #, вы не можете создать постоянную, который извлекается из способа.
Редактировать: Dead Link
http://msdn.microsoft.com/en-us/library/e6w8fe1b (vs.71) .aspx
Этот документ должен помочь: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const
Постоянное выражение - это выражение, которое может быть полностью оценено в время компиляции.
Объявите вашу локальную переменную как переменную итерации. Переменные итерации доступны только для чтения (вы не просили красивого решения).
public void f()
{
foreach (int n in new int[] { getNum() }) // n declared constant
{
n = 3; // won't compile: "error CS1656: Cannot assign to 'n' because it is a 'foreach iteration variable'"
}
}
В примере вы дали, вам необходимо объявить переменную как Static
, поскольку вы инициализируете его с помощью вызова метода. Если вы инициализировали с постоянным значением, как 42, вы можете использовать const
. Для занятий, структуров и массивов, readonly
должны работать.
Я не уверен, почему только для чтения
и const
не сработали для Вас, так как это те ключевые слова, которые Вам нужны. Вы используете const
, если у вас есть литерал (за исключением литералов массива) и readonly
, в противном случае:
public void f()
{
const int answer = 42;
}
private readonly int[] array = new int[] { 1, 2, 3, 4 };
private readonly DateTime date = DateTime.Now;
public void g()
{
Console.WriteLine(date.ToString());
}
readonly
работает только на уровне класса (т.е. вы можете применять его только к полям). Также как следствие const
, требующего буквального значения, оно по своей природе является статическим, в то время как поле readonly
может быть как статическим, так и экземпляром.
Ключевое слово const используется для изменения Декларация поля или местных Переменная.
из MSDN .
Поскольку C # не может обеспечить принуждение «Const Forrenss» (как C ++), в любом случае, я не думаю, что это очень полезно. Поскольку функции очень натуральные, нелепые, легко не потерять надзор.