【发布时间】:2011-08-08 18:08:49
【问题描述】:
我正在重构,但遇到了障碍。
背景:
我有一个基类和几个继承的派生类。派生类并不总是需要具有相同的属性。如果派生类之间共享任何属性,则这些属性将存在于基类级别(例如,“Contents”)。
同样,下面的 GoodDocument 有“GoodThings”,但不希望/不需要有“BadThings”。
我想将 'GoodDocument' 和 'BadDocument' 的实例都视为类型 'Document'
public mustinherit class Document
public property Contents as string
public sub new()...
end class
public class GoodDocument
inherits Document
public property GoodThings as string
public sub new()...
end class
public class BadDocument
inherits Document
public property BadThings as string
public sub new()...
end class
“DocumentWriter”类还将有几个派生类:(“GoodDocumentWriter”和“BadDocumentWriter”)。
我需要将 DocumentWriter.Doc 作为“文档”传递到代码中的许多其他位置。 Doc.GoodThings 只能从“GoodDocument”或“GoodDocumentWriter”的实例中调用。
public mustinherit class DocumentWriter
public property Doc as Document
public sub new()...
end class
public class GoodDocumentWriter
inherits DocumentWriter
public sub new
mybase.Doc = new GoodDocument
end sub
end class
public class BadDocumentWriter
inherits DocumentWriter
public sub new
mybase.Doc = new BadDocument
end sub
end class
问题:
是否存在允许派生类具有基类级别不存在的成员的设计模式?
是否所有属性都必须位于基类级别?
修订
我试图简短地回答我最初的问题,但我犯了过度简化情况的错误。简而言之,我确实意识到应该可以在每个派生类上拥有不同的属性。 (我在半开玩笑的庄园里打了那个,并不想把它放在最后的帖子里)。
我现在意识到,我遇到的问题实际上是需要解决的更大问题的症状。
似乎我遇到了编译器投诉,可以通过进一步重构和更松散的耦合来纠正这些投诉。虽然其他人回答了我提出的基本问题,但 Ryan Gross 的例子确实帮助激发了一些新的想法。
谢谢!
【问题讨论】:
标签: vb.net design-patterns inheritance