[英]Derive abstract class from non-abstract class
從非抽象類派生抽象類是否可以,或者這種方法有問題嗎?
這是一個小例子:
public class Task {
// Some Members
}
public abstract class PeriodicalTask : Task {
// Represents a base class for task that has to be done periodicaly.
// Some additional Members
}
public class DailyTask : PeriodicalTask {
// Represents a Task that has to be done daily.
// Some additional Members
}
public class WeeklyTask : PeriodicalTask {
// Represents a Task that has to be done weekly.
// Some additional Members
}
在上面的例子中,我不想讓類Task抽象,因為我想直接實例化它。 PeriodicalTask應該從Task繼承功能並添加一些額外的成員,但我不想直接實例化它。 只應實例化PeriodicalTask的派生類。
我認為這種方法沒有任何問題。
您可能有一些可以用具體術語描述的基本類型。 現在,僅僅因為這種類型的對象可能會根據某個子類型進一步分類,並不是說所有這些子類型都具體; 他們可能反過來要求進一步具體化。
現實世界的例子:
Person
- 具體 (非抽象)
Sibling: Person
- 抽象
Brother: Sibling
- 混凝土
Sister: Sibling
- 混凝土
它沒有錯。
如果你看一下像WinForms這樣的大層次結構,你會發現幾層抽象類型。
MSBuild任務也是一個很好的(更相關)的例子。
這種事情一直在發生:所有抽象類都繼承自System.Object
,這個類本身並不是abstract
的。
new System.Object()
有時用於鎖定,如果你沒有其他任何東西,你可以鎖定。
因此,使用抽象不是正確的方法,例如,使用受保護的或內部構造函數。 這樣可以防止直接創建PeriodicalTask的實例,但是派生類仍然可以訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.