0
static void Main(string[] args)
 {
    string str = "abc";
    str += "xyz";
    Console.WriteLine(str);
 }

Here is += a type of polymorphism?

4

3 回答 3

6

不,它的字符串连接不是多态性

多态性(C# 编程指南)(基于基派生类)

多态性通常被称为继封装和继承之后的面向对象编程的第三大支柱。多态性是一个希腊词,意思是“多形”,它有两个不同的方面:

  • 在运行时,派生类的对象可以在方法参数和集合或数组等位置被视为基类的对象。发生这种情况时,对象的声明类型不再与其运行时类型相同。
  • 基类可以定义和实现虚方法,派生类可以覆盖它们,这意味着它们提供自己的定义和实现。在运行时,当客户端代码调用该方法时,CLR 会查找对象的运行时类型,并调用该虚拟方法的覆盖。因此,在您的源代码中,您可以调用基类上的方法,并导致执行派生类的方法版本。

编辑,在这篇 MSDN文章中提到了不同类型的多态性。

接口多态性——多个类可以实现同一个接口,单个类可以实现一个或多个接口。接口本质上是类需要如何响应的定义。接口描述了一个类需要实现的方法、属性和事件,以及每个成员需要接收和返回的参数类型,但将这些成员的具体实现留给实现类。

继承多态性——多个类可以从一个基类继承。通过继承,类在与基类相同的实现中接收基类的所有方法、属性和事件。然后可以根据需要实现其他成员,并且可以覆盖基本成员以提供不同的实现。请注意,继承的类也可以实现接口——这些技术不是相互排斥的。

通过抽象类实现多态性——抽象类提供继承和接口的元素。抽象类是一个自身不能实例化的类;它必须被继承。类的部分或全部成员可能未实现,由继承类提供该实现。实现的成员可能仍然被覆盖,继承类仍然可以实现附加接口或其他功能。

于 2013-10-07T16:15:30.220 回答
2

a += b自然的意思a = a + b。在字符串的情况下,+运算符将第二个字符串连接到第一个字符串上。它不是一个重载的函数(我怀疑这就是你的意思),而是一个重载的运算符,根据定义,它是一种特定的多态性。所以简单的答案是肯定的,但也许不是你想的那样。

于 2013-10-07T16:19:16.667 回答
0

这是运算符重载,而不是多态性,在这种情况下会进行字符串连接。您可以在此位置找到有关运算符重载的更多信息:MSDN Link to Operator Overloading

于 2013-10-07T16:43:16.230 回答