2016-03-24 20 views
0

Ich versuche Passing bin der m_paths Wert aus der Klasse zu übergeben: ExtractDescriptorsForm.Cs zu VisualizeFrom.Cs .. Dies ist, wie die Variablen in ExtractDescriptorsForm.Cs definiert:Variablen aus Cs-Datei an einem anderen Cs-Datei in C#

namespace MediaLab.TopSurf 
{ 
    public partial class ExtractDescriptorsForm : Form 
     { 
      // list of paths that point directly at images, or at 
      // directories that contain images 
      List<string> m_paths; 
      public List<string> Paths { get { return m_paths; } } 
    ......}} 

Was schrieb ich in VisualizeForm.Cs:

List<string> j = ExtractDescriptorsForm.m_paths; 

der Fehler ist:

eine Objektreferenz für den nicht-statisches Feld, m erforderlich ist ethode oder Eigenschaft ‚MediaLab.TopSurf.ExtractDescriptorsForm.m_paths‘

+1

Sie könnten vielleicht ein besseres Verständnis für den Unterschied zwischen einer Klasse und einer Instanz der Klasse entwickeln. Zum Beispiel könnte eine Klasse "Person" sein und eine Instanz der Klasse könnte "Person joe = new Person()" sein. Die Variable 'joe' enthält nun eine * Referenz * auf eine Instanz der Person-Klasse. Wenn Sie diese Unterscheidung einmal verstanden haben, wird das Konzept von * statisch * viel mehr Sinn machen. – phoog

+1

Diese Variable ist nicht statisch, daher benötigen Sie eine Objektreferenz. Ich nehme an, Sie haben ein 'var thing = new ExtractDescriptorsForm()' irgendwo? Um zu der Variablen in diesem Fall zu gelangen, würden Sie 'List j = thing.m_paths;' edit: Das heißt, wenn Sie es öffentlich machen. Für den Code gebucht 'List j = thing.Paths;' sollte funktionieren. – Quantic

+0

Auch Variablen sind standardmäßig 'privat', was bedeutet, dass selbst wenn Sie eine Instanz der Klasse hätten, Sie nicht in der Lage wären, 'm_pfade' zu ​​referenzieren. Sie müssten es in "public" ändern - aber das eröffnet eine ganz neue Dose Würmer, aber es gibt bereits eine "öffentliche" Eigenschaft, die Sie verwenden sollten. – ChrisF

Antwort

0

zu starten, muss ich sicher, dass Sie etwas sehr grundlegende hier verständlich machen:

Dateien haben nichts damit zu tun!

Sie arbeiten mit Klasse Objekte, keine Dateien. Sie können mehr als eine ExtractDescriptorsForm haben, die gleichzeitig auf dem Bildschirm angezeigt wird, und es gibt keinen Grund, dass dieses Formular in einer Datei mit dem Namen ExtractDescriptorsForm.cs sein muss. In der Tat könnten Sie sowohl die ExtractDescriptorsForm als auch die VisualizeFrom Klassendefinitionen in dieselbe Datei schreiben.

Lernen Sie dies, und lernen Sie es gut, oder Sie werden Mühe haben, jemals effektiver Code zu schreiben.

Fall in Punkt ... für dieses Problem, das VisualizeFrom Objekt versucht, nach der Paths Eigenschaft in einem ExtractDescriptorsForm Objekt zu suchen ... aber welches Objekt? Sie verwenden hier den Klassennamen, wenn Sie über Instanzen der Klasse nachdenken müssen.

Ich sehe die Kommentare, die Sie versuchen, ein neues ExtractDescriptorsForm Objekt zu erstellen. Dies ist wahrscheinlich ein Fehler. Sehr wahrscheinlich haben Sie bereits eine Instanz in Ihrem Programm, die Sie bereits verwenden, die möglicherweise von Code erstellt wurde, den Visual Studio für Sie bereitgestellt hat. Sie müssen diese vorhandene Referenz finden.

Verwandte Themen