[英]Eiffel: Can I use `expanded SOME_DEFERRED_CLASS`?
x: expanded SOME_DEFERRED_CLASS
無法x: expanded SOME_DEFERRED_CLASS
,因為:
deferred
類不能用於對象實例化。 expanded
類型不允許多態 。 我錯過了什么嗎?
x: expanded A_CLASS
是過時的語法。 不再受支持。
但是,可以在類定義中使用expanded
。 正如您所引用的,在這種情況下,不可能同時具有延遲類和擴展類。
作為一條簡單的規則,可以定義一個僅包含下一個列表的類: expanded
, deferred
, separate
, frozen
。
如果您希望“擴展”一個已經存在的實現,則只需要創建此類的繼承人即可。 看一下Eiffel的內核庫,您可以找到它的示例(例如INTEGER_32
擴展類INTEGER_32_REF
繼承)
你是對的。 可以將其表述改為:
因此,即使從技術上來說,可能允許聲明延遲擴展類型的實體,也不能使用它們。
正如在另一個答案中正確指出的那樣,在現代Eiffel中,只能使用一個類標記來指示其狀態,因此,從語法上講,不可能聲明延遲的擴展類或類型。 但是,即使允許,它也沒有用。
編輯:
有兩種一致性: 直接和通用 。 直接一致性反映了父子關系:沒有傳遞性或自反性規則,沒有類型NONE
的特殊規則,等等。它基本上聲明,如果類C
繼承自類P
,則類型C
符合類型P
在某些條件下。 條件排除了C
擴展時的情況。
一般一致性使用直接一致性作為其他基本情況之一,例如,反身性規則“ 類型符合自身 ”。 因此,規則“ 無類型直接符合擴展類型 ”僅表示繼承鏈接對於擴展類型無關緊要。 但是由於自反性規則,擴展類型仍然符合其自身。
注釋“ 從1 ”后面的所有這些詳細信息。 可以在標准ECMA-367 (第8.14節)中找到更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.