天天看点

面向对象——虚方法

通过virtual关键字修饰的方法称为虚方法。虚方法可以被子类重写。例如程序中经常用的ToString()方法就是一个虚方法,它可以在其子类中重写,实现输出自定义格式的字符串。

注意:1、virtual修饰符不能与static、abstract或者override修饰符同时使用。

2、虚方法不能是私有的,所以virtual修饰符不能与private修饰符同时使用。

例:使用virtual修饰符声明一个虚方法,用来计算两个数的和

Public virtual int Add( int x,int y)

{

        Return x+y;

}

2、重写方法:如果一个方法声明中含有override修饰符,则称该方法为重写方法,它主要用来使用相同的签名重写继承的虚方法。虚方法主要用来引入新方法,重写方法则使从积累继承而来的虚方法专用化。

例:public override int Add(int x, int y)

{return x+y;}

注意:override修饰符不能与new、static或者virtual修饰符同事时使用。另外、重新方法只能用于重写基类的虚方法,不能用来单独声明方法。

例:

面向对象——虚方法

  public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       /// <summary>

       /// 建立的虚方法,可以在子类中被重写

       /// </summary>

       class Operation

           public virtual double operation(int x,int y)

           {

               return x * y;

           }

       /// 在子类中重写虚方法

       class Addition : Operation

           public override double operation(int x, int y)

               return (x + y);

       private void Form1_Load(object sender, EventArgs e)

           comboBox1.SelectedIndex = 0;

       private void txtNum1_KeyPress(object sender, KeyPressEventArgs e)

           if (!(e.KeyChar <= '9' && e.KeyChar >= '0') && e.KeyChar != '\r' && e.KeyChar != '\b')

               e.Handled = true;

       private void txtNum2_KeyPress(object sender, KeyPressEventArgs e)

       private void button1_Click(object sender, EventArgs e)

           if (txtNum1.Text == "" || txtNum2.Text == "")

               MessageBox.Show("请输入数字", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);

           else

               if (comboBox1.SelectedIndex == 0)

               {

                   Operation multiplication = new Operation();//原始虚方法进行乘法运算

                   txtResult.Text = multiplication.operation(Convert.ToInt32(txtNum1.Text.Trim()), Convert.ToInt32(txtNum2.Text.Trim())).ToString();

               }

               else

                   Operation Addition = new Addition();

                   txtResult.Text = Addition.operation(Convert.ToInt32(txtNum1.Text.Trim()), Convert.ToInt32(txtNum2.Text.Trim())).ToString();

   }

继续阅读