为了账号安全,请及时绑定邮箱和手机立即绑定

从父类访问子类

从父类访问子类

C#
忽然笑 2021-08-29 17:52:27
对于我构建的许多应用程序,我使用一个包含许多常用方法的自定义类。随着时间的推移,这个库变得非常广泛,现在我正在尝试清理该库并为每个类别添加子类,例如常规、调试、日志记录和设置。目前我的班级是这样的: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 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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


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


查看完整回答
反对 回复 2021-08-29
  • 1 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信