从父 class 访问子 class
Accessing subclasses from the parent class
对于我构建的许多应用程序,我使用自定义 class,其中包含许多常用方法。
随着时间的推移,这个库变得相当广泛,现在我正在尝试清理那个库并为每个类别添加子classes,例如常规、调试、日志记录和设置.
目前我的 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() { }
}
}
在实现中我想引用 class 库,例如:
Tools.Library library = new Tools.Library();
但我真的不想为每个子class 实现新变量。理想情况下,我想从库 class 中访问不同的方法。
例如:
Tools.Library library = new Tools.Library();
library.General.updateText(lblTest, "test");
library.Settings.someMethod();
有办法实现吗?
谢谢。
除了将所有嵌套 classes 设置为静态(如果适合您的需要,这样做是更好的选择),您可以实现嵌套 class "general" 在你的 main class "library" 的构造函数中。不过这有点奇怪。
此外,我认为重要的是要注意这不是 "SubClass",这是完全不同的事情。这些是 "Nested class"。如果您正在搜索 "subclass" 并尝试在此处将这些建议应用到您的 "nested class" 想法中,您可能会在 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()
{
}
}
}
然后你可以引用它的方法而不用初始化嵌套的class(因为它已经在主class的构造函数中初始化)。
Tools.Library library = new Tools.Library();
library.general.updateText(...);
对于我构建的许多应用程序,我使用自定义 class,其中包含许多常用方法。
随着时间的推移,这个库变得相当广泛,现在我正在尝试清理那个库并为每个类别添加子classes,例如常规、调试、日志记录和设置.
目前我的 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() { }
}
}
在实现中我想引用 class 库,例如:
Tools.Library library = new Tools.Library();
但我真的不想为每个子class 实现新变量。理想情况下,我想从库 class 中访问不同的方法。 例如:
Tools.Library library = new Tools.Library();
library.General.updateText(lblTest, "test");
library.Settings.someMethod();
有办法实现吗? 谢谢。
除了将所有嵌套 classes 设置为静态(如果适合您的需要,这样做是更好的选择),您可以实现嵌套 class "general" 在你的 main class "library" 的构造函数中。不过这有点奇怪。
此外,我认为重要的是要注意这不是 "SubClass",这是完全不同的事情。这些是 "Nested class"。如果您正在搜索 "subclass" 并尝试在此处将这些建议应用到您的 "nested class" 想法中,您可能会在 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()
{
}
}
}
然后你可以引用它的方法而不用初始化嵌套的class(因为它已经在主class的构造函数中初始化)。
Tools.Library library = new Tools.Library();
library.general.updateText(...);