(三十一)C#编程基础复习——多态

特此声明:本教程内容可能有部分参照其他博主的观点或描述,但始终不影响我学习的热情,代码全部自己手工敲打,编辑此教程目的不是为了博取大家眼球,也不是为利益所驱,只是纯属为了方便自己学习,编辑的过程中也让自己加深了对C#各个基础的印象,同时也让自己编码过程更加流畅顺利,最后还能帮助到有需要的人,代码都是自己亲测有效,如有侵权可以联系本人删除。

多态与封装和继承被视为面向对象编程的三大特性。多态是一个希腊词(Polymorphism),指“多种形态”,在C#中具有两种类型的多态:

  1. 编译时多态:通过C#中的方法重载和运算符重载来实现编译时多态,也称为静态绑定或早期绑定;
  2. 运行时多态:通过方法重载实现的运行时多态,也称为动态绑定或后期绑定。

一、编译时多态

在编译期间将函数与对象链接的机制称为早期绑定,也称为静态绑定。C#提供了两种技术来实现编译时多态,分别是函数重载和运算符重载,本节介绍函数重载,运算符重载会在后面进行讲解。

函数重载:在同一个作用域中,可以定义多个同名的函数,但是这些函数彼此之间必须有所差异,比如参数个数不同或参数类型不同等等,返回值类型不同除外。

示例代码:定义名为print的函数来打印不同类型的数据

namespace _018
{
    internal class Program
    {
        void print(int i)
        {
            Console.WriteLine("打印int类型的数据:{0}",i);
        }
        void print(double d)
        {
            Console.WriteLine("打印double类型的数据:{0}",d);
        }
        void print(string s)
        {
            Console.WriteLine("打印string类型的数据:{0}",s);
        }
        static void Main(string[] args)
        {
            Program p = new Program();
            p.print(123);
            p.print("Hello World");
            p.print(3.1415926);
            Console.ReadKey();

        }
    }
}

运行结果:

二、运行时多态

C#允许您使用abstract关键字来创建抽象类,抽象类用于实现部分接口。另外,抽象类包含抽象方法,可以在派生类中实现。

下面列举了一些有关抽象类的规则:

  1. 不能创建一个抽象类的实例;
  2. 不能在一个抽象类外部声明抽象方法;
  3. 通过在类定义时使用sealed关键字,可以将类声明为密封类,密封类不能被继承,因此抽象类中不能声明密封类;

示例代码如下:演示什么是抽象类

namespace _019
{
    abstract class Shape
    {
        public abstract int area();
    }
    class Rectangle : Shape
    {
        private int width, height;
        public Rectangle(int w,int h)
        {
            width = w;
            height = h;
        }
        public override int area()
        {
            return (width * height);
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle(12, 15);
            double a = r.area();
            Console.WriteLine("长方形的面积为:{0}", a);
            Console.ReadKey();

        }
    }
}

运行结果:

posted @   代号六零一  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示