从父类访问子类

对于我构建的许多应用程序,我使用一个包含许多常用方法的自定义类。


随着时间的推移,这个库变得非常广泛,现在我正在尝试清理该库并为每个类别添加子类,例如常规、调试、日志记录和设置。


目前我的班级是这样的:


public class General

{

    public Form frmMain;


    public void updateText(Control ctrl, string content)

    {

        if (ctrl != null && (ctrl is Label || ctrl is TextBox))

        {

            if (ctrl.InvokeRequired)

            {

                ctrl.Invoke(new MethodInvoker(delegate

                {

                    ctrl.Text = content;

                }));

            }

            else ctrl.Text = content;

        }

    }

}

我想做的是像这样转换它:


public class Library

{

    public class General

    {

        public Form frmMain;

        public void updateText(Control ctrl, string content)

        {

            if (ctrl != null && (ctrl is Label || ctrl is TextBox))

            {

                if (ctrl.InvokeRequired)

                {

                    ctrl.Invoke(new MethodInvoker(delegate

                    {

                        ctrl.Text = content;

                    }));

                }

                else ctrl.Text = content; 

            }

        }

    }


    public class Settings

    {

        public Form frmMain;

        public void someMethod() { }

    } 

}

在实现中,我想引用类库,例如:


Tools.Library library = new Tools.Library();

但我真的不想为每个子类实现新变量。理想情况下,我想从 Library 类中访问不同的方法。例如:


Tools.Library library = new Tools.Library();

library.General.updateText(lblTest, "test");

library.Settings.someMethod();

有没有办法实现这一目标?谢谢你。


忽然笑
浏览 158回答 1
1回答

慕婉清6462132

除了将所有嵌套类设置为静态(如果这适合您,这样做是更好的选择),您还可以在主类“库”的构造函数中实现嵌套类“通用”。不过这有点奇怪。另外我认为重要的是要注意这不是“子类”,这是完全不同的东西。这些是“嵌套类”。如果您正在搜索“子类”并尝试将这些建议应用于您的“嵌套类”想法,那么您可能会在 Google 上得到一些非常错误的建议。namespace Tools{    public class Library    {        public General general;        public Library        {             general = New General();        }        public class General        {            public Form frmMain;            public void updateText(Control ctrl, string content)            {                if (ctrl != null && (ctrl is Label || ctrl is TextBox))                {                    if (ctrl.InvokeRequired)                    {                        ctrl.Invoke(new MethodInvoker(delegate                        {                            ctrl.Text = content;                        }));                    }                    else                    {                        ctrl.Text = content;                    }                }            }        }        public class Settings        {            public Form frmMain;            public void someMethod()            {            }        }}然后你可以在不初始化嵌套类的情况下引用它的方法(因为它已经在主类的构造函数中初始化了)。Tools.Library library = new Tools.Library();library.general.updateText(...);
打开App,查看更多内容
随时随地看视频慕课网APP