首页 > 解决方案 > 在类中初始化变量的最佳实践,可用于 C# 中的所有方法

问题描述

我可以拥有所有类方法都可以访问和初始化的变量吗?我有一个只有方法的类,我没有从中创建对象,但我希望所有方法都有一些相互变量,例如,在这种情况下

字典回调

class Person
{

        public static void do(Button va, Dictionary<string, CallBack> callBacks)
        {
            callBacks["do1"].Press(va);
            callBacks["do2"].Press(va);
        }

        public static void go(dynamic va, Dictionary<string, CallBack> callBacks)
        {
            callBacks["go1"].Press(va);
            callBacks["go2"].Press(va);
        }

        public static void sit(dynamic va, Dictionary<string, CallBack> callBacks)
        {
            callBacks["sit1"].Press(va);
            callBacks["sit2"].Press(va);
        }

        public static void eat(dynamic va, Dictionary<string, CallBack> callBacks)
        {
            callBacks["eat1"].Press(va);
            callBacks["eat2"].Press(va);
        }
}

我从调用类传递callBacks,但我宁愿在人员类中定义它或从父类访问它。

在父级中,我将其定义为:

callBacks = someVariable.other;

标签: c#

解决方案


如果您的回调字典相同并且没有更改,则可以将其声明为类的静态只读属性Person

class Person
{
        public static readonly Dictionary<string, CallBack> Callbacks  = 
                new Dictionary<string, CallBack> 
                {
                   {"do1", new CallBack(....)},
                   {"do2", new CallBack(....)},
                   .....
                };

        public static void do(Button va)
        {
            Callbacks["do1"].Press(va);
            Callbacks["do2"].Press(va);
        }
        .......
}

其他类将能够通过Person.Callbacks语法访问它。

UPD

如果您需要从上面传递它,那么我建议您将方法从静态更改为实例并通过构造函数传递回调:

class Person
{ 
        public Person(Dictionary<string, CallBack> callbacks)
        {
              Callbacks = callbacks;
        }             

        private readonly Dictionary<string, CallBack> Callbacks;

        public void do(Button va)
        {
            Callbacks["do1"].Press(va);
            Callbacks["do2"].Press(va);
        }
        .......
}

推荐阅读