簡體   English   中英

從父類訪問子類

[英]Accessing subclasses from the parent class

對於我構建的許多應用程序,我使用一個自定義類,該類包含許多常用方法。

隨着時間的流逝,該庫已經變得相當廣泛,現在我正嘗試清理該庫並為每個類別(例如常規,調試,日志記錄和設置)添加子類。

目前,我的課程如下所示:

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

有沒有辦法做到這一點? 謝謝。

除了將所有嵌套類都設置為靜態(如果您需要的話,這樣做是一個更好的選擇),您還可以在主類“庫”的構造函數中實現嵌套類“ general”。 不過這有點奇怪。

另外,我認為必須注意,這不是完全不同的“ SubClass”。 這些是“嵌套類”。 如果您要搜索“子類”並將這些建議應用於此處的“嵌套類”構想,則可能會在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(...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM