статическое поле не изменилось? - PullRequest
0 голосов
/ 22 мая 2019

Я новичок в C #, просто вопрос по статическому полю. Допустим, у нас есть следующий класс:

 class SavingsAccount
    {
        public double currBalance;

        // A static point of data.
        public static double currInterestRate = 0.04;

        public SavingsAccount(double balance)
        {
            currBalance = balance;
        }

        // Static members to get/set interest rate.
        public void SetInterestRate(double newRate)
        { 
            currInterestRate = newRate; 
        }

        public static double GetInterestRate()
        { 
            return currInterestRate; 
        }
    }
...
static void Main(string[] args)
        {
            SavingsAccount s1 = new SavingsAccount(50);
            Console.WriteLine("Interest Rate is: {0}", SavingsAccount.GetInterestRate());
            s1.SetInterestRate(0.09);
            SavingsAccount s2 = new SavingsAccount(100);
            Console.WriteLine("Interest Rate is: {0}", SavingsAccount.GetInterestRate());
            Console.ReadLine();
        }

и вывод:

Interest Rate is: 0.04
Interest Rate is: 0.09

Я понимаю, что статические поля применяются на уровне класса, но когда мы создаем s2:

SavingsAccount s2 = new SavingsAccount(100);

не правда ли public static double currInterestRate = 0.04; сбросить currInterestRate обратно на 0,04? почему 0,09? что делает CLR, чтобы он не сбрасывался?

1 Ответ

3 голосов
/ 22 мая 2019

не является ли это public static double currInterestRate = 0.04;сбросить currInterestRate обратно до 0,04?

Нет, статические поля принадлежат область видимости .Таким образом, независимо от того, сколько вы создаете SavingsAccount объектов, существует только один currInterestRate.

Обратите внимание, что при создании нового объекта SavingsAccount поля экземпляра инициализируются, а затемконструктор выполняется, но статические поля не затрагиваются.Пожалуйста, не думайте, что весь сегмент кода вне методов выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...