Witam, przerabiam książkę "C# 5.0 Programowanie" i nie rozumiem dlaczego ten kod działa nie tak jak ja sobie to wyobrażam:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
class Counter
{
private readonly int _count;
private static int _totalCount;
public Counter()
{
_count = 0;
}
public Counter(int counter)
{
_count = counter;
}
public Counter GetNextValue()
{
_totalCount += 1;
return new Counter(_count + 1);
}
public static Counter operator ++(Counter input)
{
return input.GetNextValue();
}
public int Count
{
get { return _count; }
}
public int TotalCount
{
get { return _totalCount; }
}
}
static void Main()
{
Counter c1 = new Counter(); // tworzę nowy obiekt i przypisuję referencję
Counter c2 = c1; // c1 i c2 pokazują na to samo
c1++; // (?)używam operatora ++ ale zwracanej wartości nigdzie nie przypisuje
Console.WriteLine("c1: " + c1.Count); // (?)moim zdaniem powinno być tutaj 0, a nie 1, dlaczego tak się dzieje?
c1++;
Console.WriteLine("c1: " + c1.Count); // (?)moim zdaniem powinno być tutaj 0
c1 = c1.GetNextValue(); // tutaj jest okej bo zwracaną wartość przypisuję więc teraz c1 powinno zawierać wartość 1;
c2++;
Console.WriteLine("c2: " + c2.Count); // (?)moim zdaniem powinno być tutaj 0
c1++;
Console.WriteLine("c1: " + c1.Count); // (?)moim zdaniem powinno być tutaj 1, a jest 4, WTF ?
Console.ReadKey();
}
}
}
Chodzi mi głównie o operator ++, okej zwraca on referencję do nowego obiektu ale ta referencja nie jest nigdzie przypisywana więc z jakiej racji to działa? Moim zdaniem tak powinno być okej:
c1 = c1++;
skoro mamy być konsekwentni tak jak wygląda to w wypadku wywołania funkcji:
c1 = c1.GetNextValue();