服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 深入理解c#多态

深入理解c#多态

2022-09-09 14:22Tynam Yang C#

这篇文章主要介绍了c#多态的相关知识,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

继承概念

  多态:即一个接口,多个功能

  同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果

  多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的 

静态多态性

  在静态多态性中,函数的响应是在编译时发生的

  父类中如果有方法需要子类重写,可以将该方法标记为虚方法

  虚方法必须在父类中有实现,空实现也可以

  虚方法子类可以重写,也可以不重写

  实现静态多态性有两种方法;

    函数重载

    运算符重载

函数重载

  即在同一范围中对同一函数名的多重定义

  通过定义函数的传参的不同类型或数量进行区分

  在调用函数时,根据传的参数类型和数量判断调用名字相同的那个方法 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using system;
 
namespace 函数重载
{
  class printdata
  {
    void print(int i)
    {
      console.writeline("printing int: {0}", i);
    }
 
    void print(double f)
    {
      console.writeline("printing folat: {0}", f);
    }
 
    void print(string s)
    {
      console.writeline("printing string: {0}", s);
    }
 
    static void main(string[] args)
    {
      printdata p = new printdata();
 
      // 调用 print 来打印整数
      p.print(34);
 
      // 调用 print 来打印浮点数
      p.print(234.643);
 
      // 调用 print 来打印字符串
      p.print("hello tynam");
 
      console.readkey();
 
    }
  }
}

运行结果

深入理解c#多态

运算符重载

  重定义或重载c#中内置的运算符

  通过关键字operator加运算符的符号来定义

  与其他函数一样,重载运算符有返回类型和参数列表

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using system;
 
namespace 运算符重载
{
  class complex
  {
    public int x;
    public int y;
    public int z;
    public complex(int x, int y, int z)
    {
      this.x = x;
      this.y = y;
      this.z = z;
    }
 
    public static complex operator+(complex v1,complex v2)
    {
      return new complex(v1.x + v2.x,v1.y + v2.y,v1.z + v2.z);
    }
 
    public static complex operator /(complex v1, complex v2)
    {
      return new complex(v1.x / v2.x, v1.y / v2.y, v1.z / v2.z);
    }
  }
 
  class program
  {
    static void main(string[] args)
    {
      complex v1 = new complex(1,20,31);
      complex v2 = new complex(5,6,7);
      complex v3 = v1 + v2;
      complex v4 = v1 / v2;
      console.writeline("x is {0} ; y is {1} ; z is {2}", v3.x, v3.y, v3.z);
      console.writeline("x is {0} ; y is {1} ; z is {2}", v4.x, v4.y, v4.z);
      console.readkey();
    }
  }
}

运行结果

深入理解c#多态

可重载和不可重载运算符

  可以被重载的一元运算符:+、 -、 !、~、++、--

  可以被重载的二元运算符:+、 -、 *、 /、 %

  可以被重载的比较运算符:==、!=、<、>、<=、>=

  不能被直接重载的条件逻辑运算符:&&、||

  不能被重载的赋值运算符:+=、-=、*=、/=、 %=

  不能被重载的其他运算符:=、 .、 ?:, ->、 new、 is、sizeof、typeof

动态多态性

  在动态多态性中,函数的响应是在运行时发生的

  使用关键字abstract创建抽象类,用于提供接口的部分类的实现

  当一个派生类继承自该抽象类时,实现即完成

  抽象类包含抽象方法,抽象方法可被派生类实现

  抽象方法不允许有方法体的

  当一个子类继承抽象类时,必须把父类的所有抽象成员都重写;若子类也是一个抽象类,可以不写

  子类重写父类的方法,参数和返回值必须跟父类一样

  抽象方法不能用static修饰

  抽象类是有构造函数的,虽然不能被实例化

  抽象类标记abstract,不能有任何实现,不能有方法体

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using system;
 
namespace 动态多态性
{
  abstract class shape
  {
    public abstract int area();
  }
 
  class rectangle : shape
  {
    private int length;
    private int width;
 
    public rectangle(int a = 0, int b = 0)
    {
      length = a;
      width = b;
    }
 
    public override int area()
    {
      return (width * length);
    }
  }
 
  class rectangletester
  {
    static void main(string[] args)
    {
      rectangle r = new rectangle(2, 4);
      double a = r.area();
      console.writeline("rectanglearea is: {0}",a);
      console.readkey();
    }
  }
 
}

运行结果

深入理解c#多态

以上就是深入理解c#多态的详细内容,更多关于c#多态的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/tynam/p/9652138.html

延伸 · 阅读

精彩推荐
  • C#讲解C#设计模式编程中享元模式的运用

    讲解C#设计模式编程中享元模式的运用

    这篇文章主要介绍了C#设计模式编程中享元模式的运用,享元模式主张限制对象的数量来优化内存使用,需要的朋友可以参考下...

    C#教程网5012021-11-14
  • C#C#知识整理

    C#知识整理

    本文主要介绍了C#的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧...

    键盘上青春11272021-12-22
  • C#经典排序算法之冒泡排序(Bubble sort)代码

    经典排序算法之冒泡排序(Bubble sort)代码

    这篇文章主要介绍了经典排序算法之冒泡排序(Bubble sort)代码的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下...

    kkun3632021-11-23
  • C#C#向PPT文档插入图片以及导出图片的实例

    C#向PPT文档插入图片以及导出图片的实例

    PowerPoint演示文稿是我们日常工作中常用的办公软件之一,本篇文章介绍了C#向PPT文档插入图片以及导出图片的实例,非常具有实用价值,需要的朋友可以参...

    Yesi4732021-12-15
  • C#C#中读写INI配置文件的方法

    C#中读写INI配置文件的方法

    这篇文章主要介绍了C#中读写INI配置文件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    郝光明7022022-02-25
  • C#浅谈C# 中的委托和事件

    浅谈C# 中的委托和事件

    本篇文章主要介绍C# 中的委托和事件,委托和事件在 .Net Framework中的应用非常广泛,有兴趣的可以了解一下。...

    Jimmy Zhang5732021-12-13
  • C#利用lambda表达式树优化反射详解

    利用lambda表达式树优化反射详解

    这篇文章主要给大家介绍了关于如何利用lambda表达式树优化反射的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    Fode7492022-03-06
  • C#C#正则过滤HTML标签并保留指定标签的方法

    C#正则过滤HTML标签并保留指定标签的方法

    这篇文章主要介绍了C#正则过滤HTML标签并保留指定标签的方法,涉及C#针对页面HTML元素正则匹配与替换相关操作技巧,需要的朋友可以参考下...

    蓝色水6772022-01-11