質問

こんにちは私は自分自身を教育しています。これがCardellisの定義の正しい例であるかどうかを知りたいです パラメトリック多型. 。啓発してください。
この例は、CFMLのスクリプトベースの構文にあります。

<cfscript>
Parent = createobject("component","webapp.model.Parent").init();
Child = createobject("component","webapp.model.Child").init();
GrandChild = createobject("component","webapp.model.GrandChild").init();
Test = createobject("component","webapp.model.DealWithObject");
dump(Test.getNumberOfParents(Parent));
dump(Test.getNumberOfParents(Child));
dump(Test.getNumberOfParents(GrandChild));
</cfscript>

<cfcomponent>
<cfscript>
// should deal with an infinte number of abstract data types (because of common structure)
public numeric function getNumberOfParents(component arg){
  return -1 + arraylen(structfindkey(getmetadata(arguments.arg),"extends","all"));
}
</cfscript>
</cfcomponent>
役に立ちましたか?

解決

いいえ、いや。

多型とは、何かが何であるかを確認する必要がないことを意味し、それを使用するだけです。

例は(C#)です:

public Boolean AreEqual(Object o1, Object o2)
{
  return o1.Equals(o2);
}

このメソッドは、オブジェクト(C#でほとんどすべて)から継承するあらゆるタイプのオブジェクトを受け入れ、オブジェクトを実装することができるため、それを使用してチェックを行い、パラメーターのタイプをチェックする必要はありません。
通常、オブジェクトが実行する操作をサポートすることを確認するために、何らかの種類のインターフェイスを受け入れます。

他のヒント

関数が明示的にのタイプを扱っているので、私はこのPPを信じていません any 口論。 PPのポイントは、機能がオブジェクトのタイプに関係なく機能することです。

システムに新しいタイプを導入すると、この機能は特別な取り扱いがないため壊れます。

編集:更新された例はサブタイプの多型であると思います。これは、関数がオブジェクトとそのサブタイプを処理するため、GetMetadataがオブジェクトを処理する(そして代替原理によって、サブタイプだからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top