首页 > 解决方案 > 以下示例代码中 AttemptController 中的静态字段是什么意思?

问题描述

我是 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;
        }
    }
}

标签: c#oopstatic

解决方案


因此,提出了一些更改:

  • 使类静态
  • 摆脱构造函数,因为静态类不能有实例构造函数。
  • 添加一个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;
            }
        }
    }
    

推荐阅读