c# - 从父类访问子类
问题描述
对于我构建的许多应用程序,我使用一个包含许多常用方法的自定义类。
随着时间的推移,这个库变得非常广泛,现在我正在尝试清理那个库并为每个类别添加子类,例如常规、调试、日志记录和设置。
目前我的课是这样的:
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();
有没有办法做到这一点?谢谢你。
解决方案
除了将所有嵌套类设置为静态(如果这适合您需要,这样做是一个更好的选择),您可以在主类“库”的构造函数中实现嵌套类“通用”。不过这有点奇怪。
另外我认为重要的是要注意这不是“子类”,这是完全不同的事情。这些是“嵌套类”。如果您正在搜索“子类”并尝试将这些建议应用于您的“嵌套类”想法,您可能会在 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(...);
推荐阅读
- python - AWS DLAMI - 没有为 Keras 显示 GPU
- php - 合并 2 个数组并在数组 PHP 中允许相同的值
- java - 遍历链表后如何将指针移动到链表的前面?
- ios - 如何在 Apple Developer Account 中添加测试人员?
- android - 无法安装已经编译和签名的 Apk 文件
- python-3.x - 为什么会发生此 NameError?
- corda - 是否可以在保险库内查看状态数据?
- laravel - laravel 语法 '::' 查看函数含义
- opengl - 我可以重新解释 GLSL 中的演员表吗?
- javascript - 在 php foreach 函数中单击按钮时按 id 显示模式