Fehler bei C # Teilklassen

8

Ich verwende teilweise Klassen, um einige Funktionen zwischen zwei Dateien zu teilen, aber ich erhalte einen Fehler. Was mache ich falsch?

A1.cs:

%Vor%

A2.cs:

%Vor%     
Adam Tegen 08.10.2008, 21:16
quelle

8 Antworten

20

Sind die beiden Teilklassen im selben Namespace? Das könnte eine Erklärung sein.

    
Sklivvz 08.10.2008, 21:17
quelle
5

anderer Namespace?

    
Matt Brunell 08.10.2008 21:18
quelle
4

Zuerst konnte ich Ihren Fehler nicht reproduzieren.

Wenn diese partiellen Klassen allein in einem Namespace definiert sind, bewirkt das Schlüsselwort "private", dass der Build fehlschlägt. "In einem Namespace definierte Elemente können nicht explizit als private, geschützte oder geschützte interne deklariert werden" ...

Wenn ich sie privat halte und sie in einer anderen Klasse neste, funktioniert alles gut.

Ich kann Ihren Fehler nur reproduzieren, wenn ich in einer Datei einen Teil der Klasse in einer anderen Klasse verschachtelt habe, und in einer anderen Datei die Klasse NICHT verschachtelt und dann das private Schlüsselwort löscht ... so:

Class1.cs:

%Vor%

Class2.cs:

%Vor%

Ich erhalte auch den Fehler, den Sie beschrieben haben, wenn sich die Namespaces unterscheiden.

Bitte posten Sie den gesamten Code für die Lösung, da der angegebene Code eine ungültige C # -Syntax ist und nicht ohne weiteren Kontext betrachtet werden kann.

    
Troy Howard 08.10.2008 21:48
quelle
2

Bearbeiten:

Lösung: Build-Aktion - & gt; Complile, nichts anderes

Ich werde versuchen, genauer zu sein:

Ich hatte eine Klasse unter 3 Teilklassen in 3 verschiedenen Dateien geteilt. Zu einem bestimmten Zeitpunkt hat ein Funktionsaufruf (von einem Teil einer im anderen Teil deklarierten Funktion) den Fehler "existiert nicht im aktuellen Kontext" angezeigt. Es hat lange gedauert, bis ein Typ half mir, herauszufinden, dass ich versehentlich die Build-Aktion der Datei mit einem gesetzt habe Teil zu "EmbeddedResourse" anstelle von "Compile".

Um die Build-Aktion zu wechseln, klicken Sie mit der rechten Maustaste auf die Datei im Solution Explorer und wählen Eigenschaften. Ändern Sie dann die Build-Aktion.

Diese Frage ist alt und meine Antwort ist in diesem Fall nicht gerade hilfreich. Aber es kann in einem anderen sehr seltenen Fall hilfreich sein, der sich auf Teilklassen bezieht. Entschuldigung, wenn mein Englisch nicht klar ist.

    
Andrey K. 05.08.2015 12:01
quelle
2

Die gleiche Antwort wie @Andrey K, aber in einfachen Worten

Legen Sie die Build-Aktion aller partiellen Klassen über die Fenster 'Eigenschaften' dieser Dateien auf 'Kompilieren' fest

    
Rama 25.07.2017 02:03
quelle
1

Ich denke, weil Sie Ihre Klasse als "privat" deklarieren. Versuchen Sie, den Modifikator in "internal" zu ändern, damit sich die beiden "Hälften" der Klasse in derselben Assembly "sehen" können.

    
Matt Hamilton 08.10.2008 21:21
quelle
1

Der Fehler, den ich bekomme, ist:

In einem Namespace definierte Elemente können nicht explizit als private, geschützte oder geschützte interne
deklariert werden

Ich vermute, es ist ein Namespace-Problem, wie bereits erwähnt.

    
John Kraft 08.10.2008 21:21
quelle
0

Ich analysiere deinen Code. Sie haben die partielle Klasse als verschachtelte Klasse deklariert, dies ist der Grund für den Fehler. Warum wird die partielle Klasse von bcz nicht als verschachtelte Klasse deklariert, so wird das parial-Schlüsselwort in multiple Dateien aufgeteilt, so dass jede Datei nae dieselbe ist, wenn sie in verschachtelten Klassen deklariert wurde, die sie nicht erkennen.

    
sada 21.10.2010 15:13
quelle

Tags und Links