亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從父類訪問子類

從父類訪問子類

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 關注
  • 178 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號