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# で解決できます。認めたいのですが、それを隠す場合、それはポリモーフィズムではなく、単なる隠蔽プロセスです。ポリモーフィズムの定義では、既存のものをオーバーライドする必要があります (同様のプロセスは、化学、数学などの他の科学にも見られます...)
たとえば、数学では、既存のセットまたはオブジェクトを常に再定義できる 2 番目、3 番目の... N-arny オーダーのポリモーフィズムを使用できます。しかし、コンピューター サイエンスと C# は正確にはどうでしょうか。
一部の関数型プログラミング言語 (LISP、Haskell) でそのような機能が許可されていることを読んだことがありますが、試していません。
新しいバージョンごとにC#が機能的なものを増やしているのを見ると、ラムダ/デリゲートで可能になるので、将来C#で見ることは可能ですか?
あなたはそれについてどう思いますか?