asp.net控制元件開發技巧(2)關閉基類不必要的功能

weixin_34377065發表於2007-08-16

 1.關閉容器

Control類有Controls集合屬性,即繼承Control類的控制元件都是一個容器控制元件,asp.net控制元件內建的有PlaceHolder控制元件,其只繼承自Control類,什麼也沒做。但所有控制元件都是繼承自Control類的。如一個label控制元件,照樣可以當容器使用.

None.giflabel1.Controls.add(control)

有些控制元件則不需要這個功能,如Literal控制元件,只輸出純文字,不允許新增子控制元件



很簡單,重寫CreateControlCollection方法,返回EmptyControlCollection空集合

None.gif   protected override ControlCollection CreateControlCollection()
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
return new EmptyControlCollection(this);
ExpandedBlockEnd.gif    }

None.gif

2.禁用屬性

如SqlDataSourceControl控制元件,其繼承自DataSourceControl,DataSourceControl類則繼承自Control類,DataSourceControl 不需要呈現東西,自然不需要樣式,所以像SkinIDEnableTheming等屬性則不需要使用。同時也可以用new關鍵字和一些後設資料禁用掉像WebControl類的一些公共屬性。有時候你確實不需要這些東西,或者是將這些屬性給子標籤用也可以。

ExpandedBlockStart.gifContractedBlock.gif        /**//// <exclude/>
ExpandedBlockEnd.gif        
/// <excludetoc/>

None.gif        [Bindable(false), Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
None.gif        
new public System.Drawing.Color BorderColor
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return new System.Drawing.Color();
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

總結:有時候繼承下來的並不是你所需要的,所以靈活的重寫基類的方法和屬性是非常有必要的,而且有時候還必須這麼做

相關文章