从父类访问子类

时间:2018-06-22 19:53:19

标签: c# class subclass

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

随着时间的流逝,该库已经变得相当广泛,现在我正尝试清理该库并为每个类别(例如常规,调试,日志记录和设置)添加子类。

当前我的课程如下:

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();

有没有办法做到这一点? 谢谢。

1 个答案:

答案 0 :(得分:0)

除了将所有嵌套类都设置为静态(如果您需要的话,这样做是一个更好的选择),您还可以在主类“库”的构造函数中实现嵌套类“ general”。不过这有点奇怪。

另外,我认为必须注意,这不是一个完全不同的“子类”。这些是“嵌套类”。如果您要搜索“子类”并尝试将这些建议应用于您的“嵌套类”构想,则可能会在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(...);