Csharp中的多态类型

原文地址:http://www.dingos.cn/index.php?topic=1989.0


通常多态可以分成两种类型:
1. 静态绑定
2. 动态绑定

编译器在编译时知道自己,什么是要做的事情。(例如:什么时候调用什么方法?)
函数重载属于这一类。

函数重载可以采取两种方式:
1. 使用相同的函数名,但传递的参数不同。
2. 使用相同的函数名,但参数的类型不同。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace sampleClass{
      class Program{
            static void Main(string[] args){
                  sampleClass objSampleClass = new sampleClass();
                  // 调用相同的函数名,但传递的参数个数不同
                  objSampleClass.sampleMethod();
                  objSampleClass.sampleMethod("Hai");
                  objSampleClass.sampleMethod("Hai", "Welcome");

                  // 调用相同的函数名,但传递的参数类型不同
                  objSampleClass.sampleMethod(1);

                  Console.ReadLine();
            }
      }

      class sampleClass{
          
            public void sampleMethod(){
                  Console.WriteLine("Method with no parameters");
            }

            public void sampleMethod(string param){
                  Console.WriteLine("Method with one parameters"
                        + " The value passed is {0}", param);
            }

            public void sampleMethod(string param1, string param2) {
                  Console.WriteLine("Method with Two parameters"
                        + " The value passed is {0} and {1}", param1, param2);
            }

            // 函数的参数个数相同,但参数类型不同
            public void sampleMethod(int param){
                  Console.WriteLine("Method with one parameters, But with different input type"
                        + " The value passed is {0}", param);
            }
      }
}

只有在运行时,编译器才知道调用或绑定哪个方法。是通过虚方法来实现。
1. 在基类中使用virtual关键字通知编译器这个方法可能在子类中重写。
2. 在子类中使用override关键字中重写基类的方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace virtualMethods{
      class Program{
            static void Main(string[] args){
                  sampleDerivedClass objsampleDerivedClass = new sampleDerivedClass();
                  objsampleDerivedClass.printMethod();
                
                  Console.ReadLine();
            }
      }

      class sampleBaseClass{
            virtual   public void printMethod(){
                  Console.WriteLine("I am in BaseClass Method");
            }
      }

      class sampleDerivedClass : sampleBaseClass{
            public override void printMethod(){
                  Console.WriteLine("I am in DerivedClass Method");

                  // 调用基类的方法
                  base.printMethod();
            }
      }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜晚回家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值