2012-05-31 247 views

回答

1

基本上,我使用一個經驗法則,你應該總是定義類抽象時,他們必須被繼承來實例化。因爲抽象類本身不能。

例如。假設你有一個Building類,它是抽象的。然後它必須通過派生類實例化,例如銀行或房屋。 Building類中沒有抽象方法的事實與抽象或非抽象無關。

2

abstract具有屬性的類可用於表示繼承中的基類。抽象類不能被實例化。這可能合適,因爲我們不想讓其他人爲我們的基類創建對象。

您可以定義抽象類來定義對象的抽象特性。例如:動物有眼睛。狗可以從動物遺傳,以便它會有眼睛。我們可能會創建一個Dog對象。但是我們不想創建一個Animal對象。

msdn

一個抽象類的目的是提供 共同定義一個基類,多個派生類可以共享。例如,類庫可以定義抽象類,該抽象類用作其許多功能的參數 ,並且要求程序員使用該庫 通過創建派生類 來提供它們自己的類的實現。

+0

毯子聲明...... WTF你甚至在談論什麼?我可以把任何屬性...動態對象是抽象的嗎? :P – Jay

+0

@Jay:我說'可以'。 – Shyju

+1

讓你回到你的投票,因爲至少你的答案現在有一些類型的感覺:P – Jay

1

隨着refrence到C#中,可以定義不包含抽象方法

是抽象類,絕對

然後有什麼用定義類爲抽象的?

主要是爲了傳達類應該派生的事實。通過使構造函數受到保護,也可以實現類似的效果:沒有人能夠創建類的實例而不從它繼承。

+0

任何實際例子??? –

+0

@TalhaMajid:Enum,Delegate,Array,MarshalByRefObject,Attribute,WaitHandle ....使用此查詢來查找更多信息:http://pastebin.com/zjzGNpA9 –

+0

感謝您的幫助:) –

1

將類定義爲抽象可以防止它被直接實例化。

+0

將此與上面的答案結合起來if if那不會幫助OP然後... – Jay

0

你可以將一個類定義爲抽象類,並且在其中沒有任何方法...但是,由於它只能被其他類繼承並且不能自行實例化,因此無法對其執行任何操作。

0
  1. 您不能創建抽象類的實例。
  2. 抽象關鍵字使您能夠創建不完整的類和類成員,並且必須在衍生的 類中實現。
  3. 抽象類的目的是提供多個派生類可以共享的基類的通用定義。
0

抽象類可以包含抽象方法以及普通(具體方法)。

抽象類的目的是用作可以被其他類繼承的基類。 這樣做的好處是多個子類可以利用基類(抽象類)中的方法而不必再次重寫相同的方法。

0

您定義了一個類abstract保留定義抽象成員的可能性。

這是真的,你可以避免這樣做,但在這種情況下,它意味着更少。

這樣的其他問題,可以做到:

爲什麼可以定義一些功能virtual,即使沒有人將覆蓋 它。 ?

這些是不同的概念,當然,但提出問題的想法是相同的。

希望這會有所幫助。

1

一個簡單的規則是,使抽象類(不管它或不包含抽象方法)每當你的感受,如果它是獨立的這個特定的類並不SENS ...

因此使用抽象類當

  • 你不容許一個抽象類作爲其過於籠統的對象的實例,爲此目的
  • ,但在同一時間允許你給的方法的一些具體實施 這可以由其他類繼承,這是你的分層結構的卓有成效的
+0

我仍然感到困惑,因爲我無法看到任何實際的例子。 –

+1

例如,如果你設計一些學校註冊系統(SRS)..系統的一部分肯定會跟蹤/和系統相關聯的人的信息......在這種情況下,你定義一個類Person(Class .. Too一般爲其實例化的對象)**因此,當然,抽象定義了一些抽象或非抽象的方法對於進一步的類層次結構**有用並且派生學生,這個抽象類中的教授類是確定的候選者正在爲這個SRS實例化.. –

+0

所以你看**你必須使用COMMON SENS **來設計解決方案,來到你面前的場景。 決定什麼太籠統/具體**(抽象類的設計層次結構)** 什麼與你的類沒有任何共享,只是需要與你的類的合同或僅僅共享函數簽名**(接口)** ... –