2014-02-18 10 views
5

Ich habe die folgende Situation:Wie kann ich von einer anderen Baugruppe auf eine interne statische Klasse zugreifen?

1) Ich habe eine interne statische Klasse, wo meine Software eine Form 2) initialisieren würde Ich mag die Instanz dieser Form bekommen aus anderen Gründen zu verwenden.

Beispiel Code:

Class1:

namespace x { 
     internal static class Program { 
     private static Form mainx; 
     private static void Main() { 
      ..... 
      ..... 
      mainx=new Form(.....); 
      Application.run(mainx); 
     } 
     } 
    } 

Class2: ich diese eine Sache wie verwenden möchten:

Form1 try=Program.mainx; 

Wie kann ich es tun?

Antwort

4

Wenn beide Baugruppen signiert sind, können Sie mithilfe der InternalsVisibleToAttribute interne Elemente einer Baugruppe gegenüber anderen anzeigen.

Ich benutze dies oft, um Komponententests von internen Klassen zu aktivieren, ohne sie als öffentlich zugänglich zu machen.

3

Sie könnten die Assembly mit der internen Klasse als Friend-Assembly auf der anderen Assembly markieren, mit dem Attribut InternalsVisibleTo. Mehr Informationen dazu finden Sie auf der MSDN.

Sie müssen diese Zeile zu Ihrer Klasse AssemblyInfo hinzufügen (im Ordner Properties), also in der letzten Zeile. Dies muss in dem Projekt hinzugefügt werden, in dem Sie die interne Klasse deklariert haben.

[assembly:InternalsVisibleTo("NameOfOtherAssembly")] 

Wenn mit Ihnen die mainx Eigenschaft Ihrer Program Klasse abzurufen, müssen Sie auf Ihre Klasse eine sichtbare (öffentlich oder intern) Getter machen:

internal static class Program 
{ 
    private static Form mainx; 

    ... 

    public static Form GetForm() 
    { 
     return mainx; 
    } 
} 

In Ihrer zweiten Klasse, sollten Sie dann in der Lage sein, das Formular zu erhalten, indem Sie GetForm() anrufen:

Form1 try=Program.GetForm(); 
+0

Können Sie ein vollständiges Beispiel zeigen? Ich habe [Assembly-Tag] hinzugefügt, kann aber nicht auf die Eigenschaft mainx –

+0

@SanginetoS zugreifen. Ich habe ein kleines Beispiel hinzugefügt. –

+0

Ich hatte es noch hinzufügen. Aber was muss ich in der zweiten Klasse schreiben, um meine Immobilie anzurufen? –

Verwandte Themen