私は最初にこの質問をしましたが、答えを見つける際に、継承されたメソッドの戻り値の型の共分散に対する C# のサポートの欠如が私の元の問題であることがわかりました。それを発見した後、私はどの言語がこの機能をサポートしているのか知りたくなりました。
一番多く名前を挙げられる方の回答を受け付けます。
編集:ジョン・ミリキンは、多くの動的言語がこれをサポートしていることを正しく指摘しました。明確にするために:
静的/強く型付けされた言語のみを探しています。
私は最初にこの質問をしましたが、答えを見つける際に、継承されたメソッドの戻り値の型の共分散に対する C# のサポートの欠如が私の元の問題であることがわかりました。それを発見した後、私はどの言語がこの機能をサポートしているのか知りたくなりました。
一番多く名前を挙げられる方の回答を受け付けます。
編集:ジョン・ミリキンは、多くの動的言語がこれをサポートしていることを正しく指摘しました。明確にするために:
静的/強く型付けされた言語のみを探しています。
もちろん、あらゆる動的言語 -- Python、Ruby、Smalltalk、Javascript など。
IvanHamiltonとMatNoguchiが指摘しているように、C++はこの機能をサポートしています。ただし、MSVC 7.Xから9.X(およびおそらく6)の一部のベースから継承するテンプレートクラスでは、共変の戻り型が壊れていることに注意してください。エラーC2555が発生します。
Java は 1.5 でこれに対するサポートを追加しました。以前のバージョンではコンパイルできません。
基本的に私が求めているのは、私がここでやろうとしていることをどの言語がサポートしているかです。
C# では、メソッドget()
とset()
メソッドに異なるデータ型を指定できますか? Leg get_leg()
そうでない場合は、それらを実際の関数と関数に分割しset_leg(DogLeg)
ます。そうしないと、次の 2 つのいずれかが発生します。1) の過大get_leg()
指定 2) の過小指定set_leg()
。
C++ は、共変の戻り値の型をサポートしています。
しかし、私はそれが私が求めているものだと思います..それともそうですか?
率直に言って、あなたが何を求めているのかわかりません。Java は明らかに C# と同じ戻り値の型の共分散をサポートしているため、探しているものが C# に欠けている場合は、Java にも欠けています。