2010-05-10 16 views
13

Zuerst möchte ich einen generischen Typ für Operationen mit dem zugrunde liegenden Active Directory schreiben.Beliebige VBNET-Äquivalenz von C#, wo generisches Constraint-Schlüsselwort?

Für diejenigen von Ihnen, die über AD und die System.DirectoryServices namespace wissen, ist die DirectoryEntry class die oberste wichtigste zusammen mit der DirectorySearcher-Klasse.

Wenn Sie die AD Sprache sprechen, ist alles ein DirectoryEntry. Nachdem dies gesagt wurde, muss meine Anwendung Benutzer, Gruppen und Organisationseinheiten (OU) verwalten. Jedes dieser Objekte sind AD-Einträge. Dann klingt das für mich ein guter Kandidat für GenericTypes.

Was möchte ich erreichen, ist dies:

public interface ITop { 
    string Path { get; set; } 
    string ObjectClass { get; } 
    string ContainerName { get; set; } 
    // [...] 
} 

public interface IGroup : ITop { 
    // Speciality properties here... 
} 

public interface IUser : ITop { 
    // Speciality properties here... 
} 

// And so forth... 

public sealed class DirectorySource<T> where T : ITop { 
    // Methods against AD here... 
} 

muss meine Klassenbibliothek auf die folgende Organical Kriterium reagieren:

  1. VS2005 VBNET
  2. .NET 2.0
  3. Active Directory
  4. Windows Forms

Nun, ich denke, ich habe bereits zu viele Details für meine Frage angegeben, aber auch Vorschläge zu Architektur und Design sind willkommen. Meine Frage ist:

Gibt es eine VBNET 2.0-Äquivalenz von C# where (generic type constraint) Schlüsselwort, oder Best Practice Workarounds?

Die Ergebnisse meiner Suchen scheinen mit der unwiderruflichen Schlussfolgerung zu enden. Also ich frage ...

Antwort

35

So:

Public Class DirectorySource(Of T As ITop) 

Mehrere Einschränkungen, die durch Klammern eingeschlossen sind, wie folgt aus:

Public Class DirectorySource(Of T As { ITop, IDisposable, Class, New }) 
+1

Sie würden denken, dass es so etwas wie dieses wäre ' Von T als eines der folgenden Items ITop, IDisposable, Class, New' – ChaosPandion

+6

@ChaosPandion: Generische Constraints sind andiert, nicht oored. – SLaks