我想知道,C# 是如何多态的?
如果我们基于这个词的定义:多态(...多态在面向对象编程的上下文中,是创建变量、函数或具有多种形式的对象的能力...),当然我可以提供更多关于多态性的判断,但我认为平均而言,我们所有人都理解计算机科学中的多态性是什么。
所以,关于我的问题,我与 C# 有关。
例如,我正在使用非常简单的示例,这是一个类中的标准虚拟方法和另一个类A
中的覆盖方法B
:
using System;
class A
{
public virtual void CallMe(string incString)
{
Console.WriteLine(incString);
}
}
class B : A
{
public override void CallMe(string incString)
{
incString += "_new";
Console.WriteLine(incString);
}
}
class App
{
static void Main()
{
B objectB = new B();
objectB.CallMe("hello");
}
}
首先,我很沮丧:为什么 C# 现在允许使用方法的返回类型和参数的覆盖?
例如,只是设置:
public override int CallMe(string incString)
但是你不会得到好的结果,你会捕获一个编译器异常:
B.CallMe(string)': return type must be `void' to match overridden member
new
对于我所描述的情况,如果我想定义一个名称相似但返回类型/参数列表不同的方法,我们只能在 C# 中通过使用关键字隐藏方法来解决它。我想承认,如果我们隐藏它,它根本就不是多态,它只是一个隐藏过程。定义中的多态性需要覆盖现有的东西(类似的过程可以在其他科学科学中找到,如化学、数学等......)
例如,数学允许使用第二、第三... N-arny 顺序的多态性,其中存在的集合或对象总是可以重新定义。但是计算机科学和 C# 到底是什么?
我读过,但没有尝试过,一些函数式编程语言(LISP、Haskell)确实允许这样的特性。
将来是否有可能在 C# 中看到,因为正如我所见,每个新版本的 C# 都在增加其功能性内容,越来越多,也许 lambdas/delegates 可能会实现?
你怎么看待这件事?