2010-05-21 3 views
2

Quelle est la différence d'utiliser des interfaces comme ...Implémentation d'interface Différences

j'ai une interface

Public Interface IProDataSource 

    Function read() As Integer 

End Interface 

Puis une classe

Public Class DataSource : Implements IProDataSource 

    Function read() As Integer Implements IProDataSource.read 

     some code... 

    End Function 

End Class 

Puis-je utiliser ce la façon suivante. .. Mais quelle est la différence? ... les deux approches travaillent ...

Dim obj As IProDataSource = New DataSource 
obj.read() 

vs

Dim datas as new Datasource 
datas.read() 

La seule différence que j'ai avis est que si la méthode est Declare il sera visible à l'aide de la première approche uniquement.

Merci pour vos commentaires !!!

Répondre

1

Si obj est DataSource, vous ne pouvez pas accéder aux méthodes non-Interface du DataSource via une variable déclarée comme interface. Sinon, dans votre exemple, il n'y a vraiment aucune différence.

Notez que "est un".

IList est une bonne interface à vérifier. De nombreux objets prennent ou utilisent IList comme paramètres de méthode. (Pour voir toutes les classes qui implémentent IList, ouvrez le "Object Browser", accédez à IList et développez "Types dérivés".) Par exemple, si j'implémentais un contrôle Windows.Forms, au lieu de vous forcer à passer une liste comme un Array, List, Collection, ou un autre objet, je pourrais spécifier IList et n'importe quelle classe qui implémente cette interface peut être utilisée par le contrôle.

Un exemple pratique, la propriété DataSource d'un ComboBox accepte un objet qui implémente l'interface System.Collections.IList, comme un System.Data.DataSet ou un System.Array.

Interfaces Présentation

Interfaces, comme les classes, définissent un ensemble de propriétés, méthodes et événements. Mais contrairement aux classes, les interfaces ne fournissent pas la mise en œuvre . Ils sont implémentés par les classes et définis comme entités distinctes des classes.

Une interface représente un contrat, en qu'une classe qui implémente une interface doit mettre en œuvre tous les aspects de cette interface exactement comme il est défini .

http://msdn.microsoft.com/en-us/library/s3et34z3(VS.80).aspx

0

À l'heure actuelle est semble comme l'utilisation de l'interface est un gaspillage d'efforts ...Mais que se passe-t-il si demain, vous ou quelqu'un d'autre, décide d'écrire une XMLDatasource, ou une source CSVDatasource, ou une source Internet.?

Si vous implémentez votre applicatino en utilisant la première méthode (Dim obj comme IProDataSource), alors vous n'avez pas besoin de vous soucier de ce que type de la source de données est utilisé. Tant que DataSource whaterver implémente l'interface, votre programme fonctionnera avec elle. Si vous utilisez la deuxième méthode (données Dim comme nouvelle source de données), lorsque j'essaie d'utiliser mon SuperFancyDataSource avec votre programme, vous devrez parcourir votre programme entier et changer toutes les nouvelles sources de données en New SuperFanceDataSource.