Entwickler-Ecke

Basistechnologien - Objektreferenz in C# erstellen


GerhardS - Mi 26.06.19 12:53
Titel: Objektreferenz in C# erstellen
Hallo,
wahrscheinlich bin ich noch zu sehr von ObjectPascal geprägt, wenn ich den Fehler in folgendem Code nicht sehe:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
public class Commons
{        
  public bool CreateDir(string dirname)          
  {            
    try
    {
      using (var sftp = new SftpClient(MainForm.WebHosting.Host, MainForm.WebHosting.UserName, MainForm.WebHosting.Pw))
      {
        string rootdir = @"/home/gustav/";
        sftp.Connect();
        sftp.ChangeDirectory(rootdir);
        sftp.CreateDirectory(dirname);
        sftp.Disconnect();
      }
    }
    catch (Exception ex)
    {                    
       MessageBox.Show("Compilermeldung: " + ex.Message);
       return false;        
    }
    return true;
  }
}

Der Compiler bemängelt beim Aufruf der Methode CreateDir(string dirname) aus einer anderen Klasse heraus, es sei eine Objektreferenz erforderlich. Kann mir jemand zeigen, wie ich von CreateDir diese Referenz erstelle?

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Ralf Jansen - Mi 26.06.19 13:04

Du möchtest scheinbar die Methode aufrufen ohne vorher die Klasse zu erzeugen (also ohne new in C# oder ehemals Klasse.Create() in Object Pascal).
Dazu muss die Methode statisch sein (du mußt static zur Signatur hinzufügen). Commons klingt nach einem Ding das man eh nie instanziieren will insofern kannst du gleich die ganze Klasse als static markieren.

Edit : Wo kommt MainForm in deinem Code her? Gefühlt hast du hier noch mehr Probleme.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt


GerhardS - Mi 26.06.19 13:58

Danke für den Hinweis auf die Signatur. Mit public static bool CreateDir(string dirname) akzeptiert VS 2019 den Code. Weitere Probleme mit dem Compiler habe ich nicht. Jetzt kann ich testen, ob die Anwendung das tut, was ich mir vorgestellt habe.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Vollzitat entfernt.


Th69 - Mi 26.06.19 14:30

Das, was Ralf meint, ist, daß du MainForm innerhalb deiner allgemeingültigen Klasse Commons nicht verwenden solltest, da du damit eine unnötige Abhängigkeit herstellst.
Übergebe doch am besten Host, UserName und Password als Parameter der Methode.