C# Setter 根本不起作用。它不调用任何代码

C# Setter doesn't work at all. It doesn't invoke any code

我正在尝试更改以下代码中的 Cents。但我已经被困了将近一个小时。我只是不能改变这个美分。 Setter Cents 内部根本不起作用。它不会改变值,即使我创建 Console.WriteLine("It's been written in Cents setter"); 它也不会被调用。

using System;
using System.Collections;
using System.Collections.Generic;
class Program
    {


        static void Main(string[] args)
        {
        BankAccount a = new BankAccount(50,200);
        Console.WriteLine(a.Cents);

        Console.ReadLine();
        }
    }


class BankAccount
{
    public BankAccount(uint dollars,uint cents)
    {
        this.Dollars = dollars;
        this.cents = cents;
    }
    public uint Dollars { get; private set;}
    private uint cents;
    public uint Cents
    {
        get 
        {
            return cents;
        }
        private set
        {
            cents = 500; //It doesnt change
            Console.WriteLine("It's been written in Cents setter"); // I can't invoke it
        }
    }
}

您混淆了支持字段 cents 和 属性 Cents。在 BankAccount 的构造函数中,将 cents 更改为 Cents 并且 setter 将被调用。

另外在setter你可能想说cents = value

这是正确的实现方式

using System;

class BankAccount
{
    private uint _dollars;
    private uint _cents;

    public BankAccount(uint dollars, uint cents)
    {
        this._dollars = dollars;
        this._cents = cents;
    }

    // default constructor
    public BankAccount()
    {
        this._dollars = 0;
        this._cents = 0;
    }

    public uint Cents
    {
        get
        {
            return _cents;
        }
        set
        {
            _cents = value;
        }
    }

    public uint Dollars
    {
        get
        {
            return _dollars;
        }
        set
        {
            _dollars = value;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        BankAccount account1 = new BankAccount(100, 5);
        Console.WriteLine($"There are {account1.Dollars} dollars and {account1.Cents} cents on your bank account");

        account1.Dollars = 200;
        account1.Cents = 28;

        Console.WriteLine($"There are {account1.Dollars} dollars and {account1.Cents} cents on your bank account"); 
    }
}