Tôi đang gặp sự cố khi cố gắng quá tải toán tử tăng bài đăng trong C#. Sử dụng các số nguyên, chúng tôi nhận được các kết quả sau.Quá tải sau khi tăng quá mức
int n;
n = 10;
Console.WriteLine(n); // 10
Console.WriteLine(n++); // 10
Console.WriteLine(n); // 11
n = 10;
Console.WriteLine(n); // 10
Console.WriteLine(++n); // 11
Console.WriteLine(n); // 11
Nhưng, khi tôi thử sử dụng lớp học, có vẻ như các đối tượng được trao đổi.
class Account
{
public int Balance { get; set; }
public string Name { get; set; }
public Account(string name, int balance)
{
Balance = balance;
Name = name;
}
public override string ToString()
{
return Name + " " + Balance.ToString();
}
public static Account operator ++(Account a)
{
Account b = new Account("operator ++", a.Balance);
a.Balance += 1;
return b;
}
public static void Main()
{
Account a = new Account("original", 10);
Console.WriteLine(a); // "original 10"
Account b = a++;
Console.WriteLine(b); // "original 11", expected "operator ++ 10"
Console.WriteLine(a); // "operator ++ 10", expected "original 11"
}
}
Debugging ứng dụng, phương pháp điều hành quá tải, trả về đối tượng mới với giá trị cũ (10) và đối tượng đã được thông qua tham khảo, có giá trị mới (11), nhưng cuối cùng các đối tượng là trao đổi. Tại sao chuyện này đang xảy ra?
Bạn không nên thay đổi các câu hỏi sau câu trả lời , nó gây nhầm lẫn cho những người tiếp theo nhìn vào nó. – RedGlyph
có thể trùng lặp của [Sự khác biệt giữa X = X ++; vs X ++ ;?] (http://stackoverflow.com/questions/226002/whats-the-difference-between-xx-vs-x) – nawfal