Что означает статическое поле в AttemptController в следующем примере кода? - PullRequest
0 голосов
/ 26 ноября 2018

Я новичок в C # и пытаюсь выучить статическое ключевое слово.Я не понимаю, почему мы должны инициализировать статическое поле дважды.как я понимаю, статическое поле сохраняет значение во время выполнения программы.

class Program
    {
        static void Main(string[] args)
        {

        AttemptController Obj = new AttemptController(3, 2);
        Console.WriteLine("Maximum:   {0}", AttemptController.MaxAttempts);
        Console.WriteLine("Warning:   {0}", AttemptController.WarningAttempts);
        Console.WriteLine("Threshold: {0}", AttemptController.Threshold);

        AttemptController Obj1 = new AttemptController(7, 5);
        Console.WriteLine("Maximum:   {0}", AttemptController.MaxAttempts);
        Console.WriteLine("Warning:   {0}", AttemptController.WarningAttempts);
        Console.WriteLine("Threshold: {0}", AttemptController.Threshold);
        Console.ReadLine();
    }

    class AttemptController
    {
        internal static int MaxAttempts;
        internal static int WarningAttempts;
        internal static int Threshold;

        public AttemptController(int a, int b)
        {
            MaxAttempts = a;
            WarningAttempts = b;
            Threshold = MaxAttempts - WarningAttempts;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Итак, пара предложенных изменений:

  • делает класс статическим
  • избавиться от конструктора, поскольку статические классы не могут иметь конструкторов экземпляров.
  • добавить новый метод с именем init только для демонстрационных целей.

    using System;
    
    namespace ConsoleApp4
    {
        internal class Program
        {
            private static void Main(string[] args)
            {
                AttemptController.Init(3, 2);
                Console.WriteLine("Maximum:   {0}", AttemptController.MaxAttempts);
                Console.WriteLine("Warning:   {0}", AttemptController.WarningAttempts);
                Console.WriteLine("Threshold: {0}", AttemptController.Threshold);
    
                AttemptController.Init(7, 5);
                Console.WriteLine("Maximum:   {0}", AttemptController.MaxAttempts);
                Console.WriteLine("Warning:   {0}", AttemptController.WarningAttempts);
                Console.WriteLine("Threshold: {0}", AttemptController.Threshold);
                Console.ReadLine();
        }
    }
    
        public static class AttemptController
        {
            internal static int MaxAttempts;
            internal static int WarningAttempts;
            internal static int Threshold;
    
    
    
            public static void Init(int a, int b)
            {
                MaxAttempts = MaxAttempts + a;
                WarningAttempts = WarningAttempts + b;
                Threshold = MaxAttempts - WarningAttempts;
            }
        }
    }
    
0 голосов
/ 26 ноября 2018

Поскольку вы устанавливаете поля MaxAttempts, WarningAttempts, Threshold в методе конструктора.

Когда вы используете AttemptController Obj = new AttemptController(3, 2);, это установит значение.

при использованииустановит MaxAttempts = 3 и WarningAttempts = 2

AttemptController Obj = new AttemptController(3, 2);

при использовании установит поля MaxAttempts = 7 и WarningAttempts = 5

AttemptController Obj1 = new AttemptController(7, 5);

static, разрешив всем экземплярам использовать одни и те же полязначение.

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