2012-03-13 21 views
1

我已經經歷了C#當然,和下面的話題已經在我腦海中已經雨後春筍般冒出來,而且時間已經到來,希望擺脫它:什麼是典型化的影響一種編程語言?意義典型化的

當我問自己,構建一個類型安全語言的意願背後的原因/主題是什麼,我提出的最終答案(也許是唯一的答案)是:以語言定義類型的能力允許我們對我們在程序中使用的數據實施編譯時限制,以便IDE /編譯器可以幫助防止/檢測錯誤,否則我們會錯過 - 並且可能只是晚些時候弄清楚 - 這當然是一個問題。在這些錯誤是無效操作,無效成員訪問等

如果我是正確的,直到這一點上,我然後問:這是什麼意思/真的鑄造情況,在語言如C#?假設我有一個方法是通過一個Object類型的參數來定義的,並且我將它傳遞給任何類型的派生類型(即任何類型) - 在這一點上幕後發生了什麼?

我傾向於認爲打字我還就其成員可以在我任何給定對象實例的訪問限制。換句話說,我假定編譯器總是查看變量的類型,而不是它接收到的執行/應用其驗證規則然後觸發或不觸發錯誤消息的實例。這是正確的嗎?在下面的例子中,由於變量類型是Object,因此編譯器不允許我訪問我的任何實例成員 - 除非我對該實例的類型執行強制轉換。我想在此澄清的一點是,該實例始終保持其類型 - 無論是否正在執行演員。演員,下面我的理論,僅需所以編譯器 - 一個工具,它是有幫助我們的工作 - 以及其代言我們在建立我們的程序的每一步都制服 - 可以接受此代碼是真的100%信任/「安全」。

然後,我想到上述應用於多態性,似乎是有道理的:一個更通用的類型持有一個更專業的類型的實例不會導致編譯器錯誤,因爲沒有訪問實例成員的風險這在更一般的類型中沒有定義,因爲更專門化的繼承它們(覆蓋它們或不覆蓋它們,甚至隱藏它們)。另一方面(當類型更專業時,則是實例) - 存在問題,因爲程序員可能錯誤地訪問實例中的專用成員(不存在)。作爲最後一個說明,我想每個實例都分配一塊內存(我想知道是否必須是連續的或不是) - 總計大小是每個類型成員內存需求的總和(加上一些更多的元數據/頭信息,無論什麼) - 並且每個成員定義都會生成一個特定的內存地址,用於訪問實例以訪問任何給定的成員(不管是變量,方法等)。

是上述任何錯誤的假設? (或者我應該問...他們中的任何一個是對吧?:)

+0

您可能會感興趣[上式系統的維基百科文章]在(http://en.wikipedia.org/wiki/Type_system);特別是關於動態類型和靜態類型的部分與您的問題非常相關。 – ruakh 2012-03-13 15:34:23

+0

謝謝,我實際上認爲這個討論在我讀完之後開始形成,但我絕對沒有完整地閱讀它,或者至少是你提到的所有部分。會看看。 – Veverke 2012-03-13 15:41:28

回答

0

您的回答顯示了我們在編程語言中使用類型的原因。