Ant*_*ony 2 c# user-interface casting
我将是第一个告诉别人我的代码设计可以使用改进的人.我不禁感到,当我在我的代码中进行类型转换时,它表明某些东西需要重新设计以删除类型转换.这个问题有两个部分,第一部分只是发布的一个部分:类型转换是代码设计不佳的标志吗?
第二个问题是基于第一个问题,如果类型转换是我认为的那样邪恶,那么下面的情况怎么可能避免呢?
class InputPanel : Control
{
public event EventHandler InputEvent;
}
class OutputPanel : Control
{
}
class MainWindow : Form
{
public MainWindow()
{
var loadButton = new Button();
loadButton.Click += new EventHandler(HandleButtonClick);
var inputPanel = new InputPanel();
inputPanel.InputEvent += new EventHandler(HandleInputEvent);
bodyControl = inputPanel;
}
private void HandleButtonClick(object sender, EventArgs args)
{
OpenFileDialog dialog = new OpenFileDialog();
if (dialog.ShowDialog(this) == DialogResult.OK)
{
var data = LoadDataFromFile(dialog.FileName);
var inputPanel = bodyControl as InputPanel; // Ugly typecast...
if (inputPanel != null)
{
inputPanel.PopulateFromData(data);
}
}
}
private void HandleInputEvent(object sender, EventArgs args)
{
var outputPanel = new OutputPanel();
bodyControl = outputPanel;
}
Control BodyControl;
}
Run Code Online (Sandbox Code Playgroud)
上面代码背后的原因是MainWindow表单包含一个MenuStrip(简化为本例中的一个按钮)和一个控件(BodyControl).由于显示的控件需要从输入面板更改为输出面板,通过单击按钮,您可以简单地重新分配BodyControl字段(调整父级等).这意味着一次只加载一个面板,布局逻辑变得简化,因为在MainWindow中只有一个面板(如果包含MenuStrip,则为两个),而不是根据哪个状态有条件地布置多个"主体"控件.程序在(输入与输出).