2016-06-16 64 views
0

如果我想在B()在Form1_Load()中调用时替换/覆盖B()到C()或D(),是否可能?是否有可能相等/重写一个函数/方法与另一个?

public Prototype() 
    { 
     InitializeComponent(); 
     C(); 
    }   

    private void Form1_Load() 
    { 
     B(); 
    } 

    private void B() 
    { 
     //blank so far 
     //not sure what to put 
    } 

    private void C() 
    { 
     if (RadioButton.Checked == false) 
     { B() == D(); } 
     else 
     { B() == E(); }   
    } 
    private void D() 
    { 
     //something ongoing 
    } 
    private void E() 
    { 
     //something ongoing 
    } 

基本上我需要C()要像教练时Form1_Load的()被调用B(指示),它能够说Form1_Load的()实际上需要调用d()或E()的情况基地。

我试图避免太多if..else在每种方法。 基本上,我正在开发一个软件来接收多种格式的csv源文件,并且Form1_Load()被编码以执行一组涉及图表构建和图表绘制的修复指令。我试图让它像软件的骨架一样。 C()用于确定已由用户加载的csv文件的类型,并决定如果其类型A覆盖B(),否则将B()覆盖为E()如果它是类型B. 我需要使用不同的数据集集来显示csv信息到图表,并根据csv文件中的内容,我需要设计不同的滤镜以显示相关的显示。

public void I1_ChartTabulate() 
    { 
     Stopwatch timer = new Stopwatch(); 
     timer.Start(); 

     Charting.dataGridView1.DataSource = G_BS_I1; 
     Charting.dataGridView1.AutoGenerateColumns = false; 

     Charting.dataGridView1.Columns[0].Visible = false; 
     Charting.dataGridView1.Columns[1].Visible = true; 
     Charting.dataGridView1.Columns[2].Visible = false; 
     Charting.dataGridView1.Columns[3].Visible = false; 
     Charting.dataGridView1.Columns[4].Visible = false; 
     Charting.dataGridView1.Columns[5].Visible = false; 
     Charting.dataGridView1.Columns[6].Visible = false; 
     Charting.dataGridView1.Columns[7].Visible = false; 
     Charting.dataGridView1.Columns[8].Visible = true; 
     Charting.dataGridView1.Columns[9].Visible = false; 
     Charting.dataGridView1.Columns[10].Visible = false; 
     Charting.dataGridView1.Columns[11].Visible = false; 
     Charting.dataGridView1.Columns[12].Visible = true; 
     Charting.dataGridView1.Columns[13].Visible = false; 
     Charting.dataGridView1.Columns[14].Visible = false; 
     Charting.dataGridView1.Columns[15].Visible = false; 
     Charting.dataGridView1.Columns[16].Visible = false; 
     Charting.dataGridView1.Columns[17].Visible = false; 
     Charting.dataGridView1.Columns[18].Visible = false; 
     Charting.dataGridView1.Columns[19].Visible = false; 
     Charting.dataGridView1.Columns[20].Visible = false; 
     Charting.dataGridView1.Columns[21].Visible = false; 
     Charting.dataGridView1.Columns[22].Visible = false; 
     Charting.dataGridView1.Columns[23].Visible = false; 
     Charting.dataGridView1.Columns[24].Visible = true; 
     Charting.dataGridView1.Columns[25].Visible = false; 
     Charting.dataGridView1.Columns[26].Visible = false; 
     Charting.dataGridView1.Columns[27].Visible = false; 

     timer.Stop(); 
     label62.Text = timer.Elapsed.TotalMilliseconds.ToString("#,##0.00 'milliseconds'"); 
    } 

    public void I2_ChartTabulate() 
    { 
     Stopwatch timer = new Stopwatch(); 
     timer.Start(); 

     Charting.dataGridView2.DataSource = G_BS_I2; 
     Charting.dataGridView2.AutoGenerateColumns = false; 

     Charting.dataGridView2.Columns[0].Visible = false; 
     Charting.dataGridView2.Columns[1].Visible = true; 
     Charting.dataGridView2.Columns[2].Visible = false; 
     Charting.dataGridView2.Columns[3].Visible = false; 
     Charting.dataGridView2.Columns[4].Visible = false; 
     Charting.dataGridView2.Columns[5].Visible = false; 
     Charting.dataGridView2.Columns[6].Visible = false; 
     Charting.dataGridView2.Columns[7].Visible = false; 
     Charting.dataGridView2.Columns[8].Visible = true; 
     Charting.dataGridView2.Columns[9].Visible = false; 
     Charting.dataGridView2.Columns[10].Visible = false; 
     Charting.dataGridView2.Columns[11].Visible = false; 
     Charting.dataGridView2.Columns[12].Visible = true; 
     Charting.dataGridView2.Columns[13].Visible = false; 
     Charting.dataGridView2.Columns[14].Visible = false; 
     Charting.dataGridView2.Columns[15].Visible = false; 
     Charting.dataGridView2.Columns[16].Visible = false; 
     Charting.dataGridView2.Columns[17].Visible = false; 
     Charting.dataGridView2.Columns[18].Visible = false; 
     Charting.dataGridView2.Columns[19].Visible = false; 
     Charting.dataGridView2.Columns[20].Visible = false; 
     Charting.dataGridView2.Columns[21].Visible = false; 
     Charting.dataGridView2.Columns[22].Visible = false; 
     Charting.dataGridView2.Columns[23].Visible = false; 
     Charting.dataGridView2.Columns[24].Visible = true; 
     Charting.dataGridView2.Columns[25].Visible = false; 
     Charting.dataGridView2.Columns[26].Visible = false; 
     Charting.dataGridView2.Columns[27].Visible = false; 

     timer.Stop(); 
     label63.Text = timer.Elapsed.TotalMilliseconds.ToString("#,##0.00 'milliseconds'"); 

    } 

为了更精确,d()和E()不只是一种方法,它是代表一系列的涉及处理CSV方法。

+0

我认为这个要求很简单,而且你正在复杂化一些东西,你能否更清楚一下这个要求?在这个屏幕中如何确定'D()或E()'C();'的目的是什么 –

+0

我试图避免在每个方法中有太多if..else。 –

+0

你试图避免检查if和else的可能的不同条件是什么? –

回答

0

难道你不能想:

private void B() 
{ 
    if(RadioButton.Checked == false) c(); 
    else d(); 
} 
0

没有这么多的方法,你可以简单地使用下面的代码做同样的,

private void Form1_Load() 
{ 
    if (RadioButton.Checked) 
     SomeMethod_E(); 
    else 
     SomeMethod_D(); 
} 

几注到您的知识:

您应该使用有意义的变量名称,遵循正确的命名naming conventions,这可以提高代码的可读性以及稍后的修改。

0

这取决于你真正想要/需要的,但一种解决方案是使用委托。 下面是一个简单的例子:

private VoidDelegate B; 
    delegate void VoidDelegate(); 

    private void Button1Click(object sender, EventArgs e) { 
     B = D; 
    } 

    private void Button2Click(object sender, EventArgs e) { 
     B = E; 
    } 

    private void Button3Click(object sender, EventArgs e) { 
     B(); 
    } 

    private void D() { 
     MessageBox.Show("D"); 
    } 

    private void E() { 
     MessageBox.Show("E"); 
    } 

按按钮1或2个点B到不同的方法,然后你只运行B()上Button3Click。

0

可以使用delegate这些样的目的,尤其是Action delegate是适合你的情况:

private Action B; 

private void Form1_Load() 
{ 
    if(B != null) 
    { 
     B(); 
    } 
} 

private void C() 
{ 
    if (RadioButton.Checked == false) 
    { B = D; } 
    else 
    { B = E; }   
} 
0

你想的行为称为First-Class Functions,可惜它不是东西,C#支持,但你可以仍然这样做使用Delegate - 唯一的缺点是,你需要确保你总是asigning默认操作为委托(你的代码示例将永远做反正)

private Action B; 

private void Form1_Load() 
{ 
    B(); 
} 


private void C() 
{ 
    if (RadioButton.Checked == false) { B = D; } 
    else { B = E; }   
} 

这也与Event Handlers有关,您可能以前使用过这种方法。

相关问题