簡體   English   中英

埃菲爾鐵塔:我可以使用“擴展的SOME_DEFERRED_CLASS”嗎?

[英]Eiffel: Can I use `expanded SOME_DEFERRED_CLASS`?

x: expanded SOME_DEFERRED_CLASS無法x: expanded SOME_DEFERRED_CLASS ,因為:

  1. deferred類不能用於對象實例化。
  2. expanded類型不允許多態

我錯過了什么嗎?

x: expanded A_CLASS是過時的語法。 不再受支持。

但是,可以在類定義中使用expanded 正如您所引用的,在這種情況下,不可能同時具有延遲類和擴展類。

作為一條簡單的規則,可以定義一個僅包含下一個列表的類: expandeddeferredseparatefrozen

如果您希望“擴展”一個已經存在的實現,則只需要創建此類的繼承人即可。 看一下Eiffel的內核庫,您可以找到它的示例(例如INTEGER_32擴展類INTEGER_32_REF繼承)

你是對的。 可以將其表述改為:

  1. 沒有類型直接符合擴展類型。
  2. 如果擴展類型,則它僅符合自身。 (從1開始。有更多的一致性規則,但是對於擴展類型,它們最多只能包含通用參數。)
  3. 只有正確設置了特定類型的實體,才能使用該實體。
  4. 只有用相同類型的對象實例化擴展類型的實體,才能使用它。 (從2和3開始。)
  5. 延遲類型不能用於實例化。
  6. 不能使用延遲擴展類型的實體。 (從4和5開始。)

因此,即使從技術上來說,可能允許聲明延遲擴展類型的實體,也不能使用它們。

正如在另一個答案中正確指出的那樣,在現代Eiffel中,只能使用一個類標記來指示其狀態,因此,從語法上講,不可能聲明延遲的擴展類或類型。 但是,即使允許,它也沒有用。

編輯:

有兩種一致性: 直接通用 直接一致性反映了父子關系:沒有傳遞性或自反性規則,沒有類型NONE的特殊規則,等等。它基本上聲明,如果類C繼承自類P ,則類型C符合類型P在某些條件下。 條件排除了C擴展時的情況。

一般一致性使用直接一致性作為其他基本情況之一,例如,反身性規則“ 類型符合自身 ”。 因此,規則“ 無類型直接符合擴展類型 ”僅表示繼承鏈接對於擴展類型無關緊要。 但是由於自反性規則,擴展類型仍然符合其自身。

注釋“ 從1 ”后面的所有這些詳細信息。 可以在標准ECMA-367 (第8.14節)中找到更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM