В С#, если у вас есть struct
, например:
struct Counter
{
private int _count;
public int Value
{
get { return _count; }
}
public int Increment()
{
return ++_count;
}
}
И у вас есть такая программа:
static readonly Counter counter = new Counter();
static void Main()
{
// print the new value from the increment function
Console.WriteLine(counter.Increment());
// print off the value stored in the item
Console.WriteLine(counter.Value);
}
Выходной сигнал программы будет:
1
0
Это кажется совершенно неправильным. Я ожидал бы, что результат будет равен двум 1s (как если бы Counter
был class
, или if struct Counter : ICounter
и Counter
является ICounter
), или быть ошибкой компиляции. Я понимаю, что обнаружение этого во время компиляции является довольно сложным делом, но это поведение, по-видимому, нарушает логику.
Есть ли причина для такого поведения, выходящего за пределы сложности выполнения?