2010-03-19 43 views
6

首先,我不得不說我要談談System.ComponentModel.Component.NET組件模型解釋

你知道,我知道,那.NET Component Model提供能力(通過網站服務)來定義單獨Components,使他們能夠在一個鬆散耦合的方式相互通信,而且每個Component易於更換。

但我要說的是,我可以以其他方式實現這一目標: 我的意思是,如果我在正確的Object Oriented Programming方式設計SW,我可以通過Abstract classesInterfaces等手段實現上述所有的功能/互操作性。

然後WHYWHEN我應該依靠組件模型?

回答

5

那麼,你可以用你自己的基類,接口等來做到這一點。實際上,這正是System.ComponentModel 中的內容是。這是一組常用的接口和基類,以便您可以實現組件並將其用於其他人的實現。

如果你只是建立了你自己的基類和接口,那麼任何想要與你的代碼接口的人都必須使用你的類。如果他們想要同時與兩個不同的供應商的組件集成?

特別是WinForms中的所有東西都使用System.ComponentModel的東西來實現可以放在窗體上的控件。他們不得不選擇一些接口來表示,那麼爲什麼不在System.ComponentModel中定義一個呢?爲什麼他們會建立自己的,當已經有一個完美的設計已經可用?

2

它可以讓您提供設計時間功能,可用於例如。視覺工作室。

System.ComponentModel命名空間包含實現組件和控件的運行時和設計時行爲的類型。」 您提供的功能可能是任何東西(BackgroundWorkerComboBox做了非常不同的事情,但它們都是Component)。

ComponentModel提供的元數據和回報是,您可以設計可在視覺設計器中使用的組件。因此:

public interface IDesigner : IDisposable { 

     IComponent Component {get;}   
     DesignerVerbCollection Verbs {get;} 
     void DoDefaultAction(); 
     void Initialize(IComponent component); 
} 

該命名空間還提供TypeDescriptor /轉換器的東西,同樣可用於設計時訪問屬性。 (有人建議你可以使用System.ComponentModel作爲一種IoC容器,我從來沒有見過任何人這樣做;正如你所說,因爲它沒有提供任何優於設計的東西)。

因此:如果您還想爲組件提供IDesigner,請考慮使用System.ComponentModel.Component。