Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

IComponent Interface

Definition

Namespace:
System.ComponentModel
Assemblies:
netstandard.dll, System.ComponentModel.Primitives.dll
Assembly:
System.ComponentModel.Primitives.dll
Assembly:
System.dll
Assembly:
netstandard.dll
Source:
IComponent.cs
Source:
IComponent.cs
Source:
InitializationEventAttribute.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Provides functionality required by all components.

public interface class IComponent : IDisposable
[System.ComponentModel.TypeConverter("System.ComponentModel.ComponentConverter, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
public interface IComponent : IDisposable
public interface IComponent : IDisposable
[System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ComponentConverter))]
[System.Runtime.InteropServices.ComVisible(true)]
public interface IComponent : IDisposable
[<System.ComponentModel.TypeConverter("System.ComponentModel.ComponentConverter, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")>]
type IComponent = interface
 interface IDisposable
type IComponent = interface
 interface IDisposable
[<System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ComponentConverter))>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type IComponent = interface
 interface IDisposable
Public Interface IComponent
Implements IDisposable
Derived
Attributes
Implements

Examples

The following code example demonstrates how to implement the IComponent, ISite, and IContainer interfaces.

/// <summary>
/// The following example demonstrates the implementation of
/// ISite, IComponent, and IContainer for use in a simple library container.
///
/// This example uses the System, System.ComponentModel, and System.Collections
/// namespaces.
/// </summary>
//This code segment implements the ISite and IComponent interfaces.
//The implementation of the IContainer interface can be seen in the documentation
//of IContainer.

//Implement the ISite interface.

// The ISBNSite class represents the ISBN name of the book component
class ISBNSite : ISite
{
 readonly IComponent m_curComponent;
 readonly IContainer m_curContainer;
 readonly bool m_bDesignMode;
 string m_ISBNCmpName;

 public ISBNSite(IContainer actvCntr, IComponent prntCmpnt)
 {
 m_curComponent = prntCmpnt;
 m_curContainer = actvCntr;
 m_bDesignMode = false;
 m_ISBNCmpName = null;
 }

 //Support the ISite interface.
 public virtual IComponent Component => m_curComponent;

 public virtual IContainer Container => m_curContainer;

 public virtual bool DesignMode => m_bDesignMode;

 public virtual string Name
 {
 get => m_ISBNCmpName;

 set => m_ISBNCmpName = value;
 }

 //Support the IServiceProvider interface.
 public virtual object GetService(Type serviceType) =>
 //This example does not use any service object.
 null;
}

// The BookComponent class represents the book component of the library container.

// This class implements the IComponent interface.

class BookComponent : IComponent
{
 public event EventHandler Disposed;
 ISite m_curISBNSite;

 public BookComponent(string Title, string Author)
 {
 m_curISBNSite = null;
 Disposed = null;
 this.Title = Title;
 this.Author = Author;
 }

 public string Title { get; }

 public string Author { get; }

 public virtual void Dispose() =>
 //There is nothing to clean.
 Disposed?.Invoke(this, EventArgs.Empty);

 public virtual ISite Site
 {
 get => m_curISBNSite;
 set => m_curISBNSite = value;
 }

 public override bool Equals(object cmp)
 {
 BookComponent cmpObj = (BookComponent)cmp;
 return Title.Equals(cmpObj.Title) && Author.Equals(cmpObj.Author);
 }

 public override int GetHashCode() => base.GetHashCode();
}
 'The following example demonstrates the implementation of 
 'ISite, IComponent, and IContainer for use in a simple library container.
 '
 'This example imports the System, System.ComponentModel, and System.Collections
 'namespaces.

 'This code segment implements the ISite and IComponent interfaces.
 'The implementation of the IContainer interface can be seen in the documentation 
 'of IContainer.

 'Implement the ISite interface.

 'The ISBNSite class represents the ISBN name of the book component
 
Class ISBNSite
 Implements ISite
 Private m_curComponent As IComponent
 Private m_curContainer As IContainer
 Private m_bDesignMode As Boolean
 Private m_ISBNCmpName As String

 Public Sub New(ByVal actvCntr As IContainer, ByVal prntCmpnt As IComponent)
 m_curComponent = prntCmpnt
 m_curContainer = actvCntr
 m_bDesignMode = False
 m_ISBNCmpName = Nothing
 End Sub

 'Support the ISite interface.
 Public ReadOnly Property Component() As IComponent Implements ISite.Component
 Get
 Return m_curComponent
 End Get
 End Property

 Public ReadOnly Property Container() As IContainer Implements ISite.Container
 Get
 Return m_curContainer
 End Get
 End Property

 Public ReadOnly Property DesignMode() As Boolean Implements ISite.DesignMode
 Get
 Return m_bDesignMode
 End Get
 End Property

 Public Property Name() As String Implements ISite.Name
 Get
 Return m_ISBNCmpName
 End Get
 Set(ByVal Value As String)
 m_ISBNCmpName = Value
 End Set
 End Property

 'Support the IServiceProvider interface.
 Public Function GetService(ByVal serviceType As Type) As Object Implements IServiceProvider.GetService
 'This example does not use any service object.
 GetService = Nothing
 End Function
End Class

'The BookComponent class represents the book component of the library container.
Class BookComponent
 Implements IComponent
 Public Event Disposed As EventHandler Implements IComponent.Disposed
 Private m_curISBNSite As ISite
 Private m_bookTitle As String
 Private m_bookAuthor As String

 Public Sub New(ByVal Title As String, ByVal Author As String)
 m_curISBNSite = Nothing
 m_bookTitle = Title
 m_bookAuthor = Author
 End Sub

 Public ReadOnly Property Title() As String
 Get
 Return m_bookTitle
 End Get
 End Property

 Public ReadOnly Property Author() As String
 Get
 Return m_bookAuthor
 End Get
 End Property

 Public Sub Dispose() Implements IDisposable.Dispose
 'There is nothing to clean.
 RaiseEvent Disposed(Me, EventArgs.Empty)
 End Sub

 Public Property Site() As ISite Implements IComponent.Site
 Get
 Return m_curISBNSite
 End Get
 Set(ByVal Value As ISite)
 m_curISBNSite = Value
 End Set
 End Property

 Public Overloads Function Equals(ByVal cmp As Object) As Boolean
 Dim cmpObj As BookComponent = CType(cmp, BookComponent)
 If (Me.Title.Equals(cmpObj.Title) And Me.Author.Equals(cmpObj.Author)) Then
 Equals = True
 Else
 Equals = False
 End If
 End Function

 Public Overrides Function GetHashCode() As Integer
 GetHashCode = MyBase.GetHashCode()
 End Function

End Class

Remarks

Component is the default implementation of IComponent and serves as the base class for all components in the common language runtime.

You can contain components in a container. In this context, containment refers to logical containment, not visual containment. You can use components and containers in a variety of scenarios, both visual and non visual.

System.Windows.Forms.Control inherits from Component, the default implementation of IComponent.

A component interacts with its container primarily through a container-provided ISite, which is a repository of container-specific per-component information.

Notes to Implementers

To be a component, a class must implement the IComponent interface and provide a basic constructor that requires no parameters or a single parameter of type IContainer.

Properties

Name Description
Site

Gets or sets the ISite associated with the IComponent.

Methods

Name Description
Dispose()

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

(Inherited from IDisposable)

Events

Name Description
Disposed

Represents the method that handles the Disposed event of a component.

Applies to

See also


Feedback

Was this page helpful?