Laden...

C# Namespace und Zugriff auf Klasse

Erstellt von testc vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.059 Views
Thema geschlossen
T
testc Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren
C# Namespace und Zugriff auf Klasse

Guten Tag,

Ich habe eine Namespace in einer externen C#-Datei mit folgender Klasse erstellt:

namespace test{

    public class beispiel
    {
        public void func()

        {
          //do something
        }

Nun möchte ich in einer anderen Datei die func() aufrufen und tue das aktuell nach using <namespacename> mit einer Objektinitialisierung

func o = new beispiel();
		o.func();

Das funktioniert, allerdings auch nur in der entsprechenden Funktion.
Nun möchte ich func() mehrmals in verschiedenen Funktionen benutzen, am liebsten ohne die Objektinitialisierung, bzw. würde ich gern diese irgendwohin auslagern, falls möglich.
Ist es möglich, meine Datei wie folgt aussehen zu lassen?


public void first()
{
  //do something
  o.func()
}

public void second()
{
  //do something
  o.func()
}

Vielen Dank und ein schönes Wochenende!

4.930 Beiträge seit 2008
vor 5 Jahren

Hallo und willkommen,

du kannst natürlich die Objektinitialisierung einmalig in der Klasse durchführen, indem du eine Instanz davon als Klassenmember anlegst:


class X
{
  private beispiel o = new beispiel(); // <-- privater Klassenmember

  public void first()
  {
    //do something
    o.func()
  }

  public void second()
  {
    //do something
    o.func()
  }
}

(ich habe jetzt deine Namen so übernommen, du solltest dich aber an die [Artikel] C#: Richtlinien für die Namensvergabe halten).

Alternativ als Parameter jeweils an die Methoden (Klassenfunktionen) übergeben.

T
testc Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren

Hallo,

vielen Dank für deine Antwort.
Die Namen sind natürlich verändert.

Das Hinzufügen hat so leider nicht geklappt,
hier nochmal etwas ausführlicher.

Der Fehler:> Fehlermeldung:

System error CS1518: Klasse, Delegat, Enumeration, Schnittstelle oder Struktur erwartet.

public class MyTestScript : TestModule
{
    private beispiel o = new beispiel();

    public override void Main()
    {
		
		o.func();
        
                first();
		second();
    }
 
 
    public void first()
    {		
       		//do something
    }
	
	public void second()
	{
                //do something
		o.func();
	}
}

Der Ablauf sollte also so sein, dass ich zuerst func() aus der eingefügten Namespace aufrufe, dann first() ausführe und dann second(), wo wieder o.func() drin ist.
Ich bin neu in C#, falls das nicht bereits aufgefallen ist 😉

Schönen Feierabend!

4.930 Beiträge seit 2008
vor 5 Jahren

In welcher Zeile wird denn der Fehler angezeigt?

Evtl. fehlt einfach der Namespace, also


// entweder
using test; // ganz oben außerhalb der Klasse
// oder
private test.beispiel o = new test.beispiel();

s.a. [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen).

16.806 Beiträge seit 2008
vor 5 Jahren

Hi,

denke, dass Du zunächst mal die Grundlagen von C# erarbeiten solltest. [FAQ] Wie finde ich den Einstieg in C#?

Ansonsten wirst Du beim aktuellen Wissensstand ständig auf solche Themen treffen.
Mit den Grundlagen wirst Du sehr schnell sehr viel weiter kommen.

T
testc Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren

Im ersten Post stand bereits, dass die Namespaces hinzugefügt wurden.
Der Fehler kann natürlich nur in der neu hinzugefügten Zeile kommen, denn der Code funktionierte, wie bereits erwähnt.
Es geht mir wirklich nur darum, den Code zu vereinfachen und nicht bei jedem Aufruf eine Objektinitialisierung voranzuschreiben.

Hallo Abt,
ich finde nicht, dass du mir irgendeinen Tipp geben solltest, der über die Lösung des Problems hinausgeht.
Bei Kaufland drückt dir die Mitarbeiterin auch nicht einfach einen Katalog in die Hand wenn du schlussendlich nur wissen willst, wo die Bananen stehen 😉
Wenn du wie ich für viele Projekte gleichzeitig bezahlt wirst, wirst du entsprechend reagieren, wenn dir jemand ohne Ahnung so einen Beitrag am Freitag Nachmittag schreibt. Wenn du nicht ständig mit C# zu tun hast, reicht es oft, das nötigste zu tun. Ich empfehle dir dich mit dem 80:20 Prinzip vertraut zu machen. Sollte das nicht deiner Lebensweise entsprechen, dann ist das dein Ding, mich hat das zu einer Wimi Stelle an einer Uni gebracht.

Viele Grüße

16.806 Beiträge seit 2008
vor 5 Jahren

Du bist hier in einem Forum: es ist der Sinn hier, dass die Leute Dir Tipps geben.
Mit der Reaktion auf einen dementsprechenden Tipp bist Du jedenfalls auf dem Holzpfad.
Aber sehr nett, dass Du Dich im Forum registriert hast um uns zu erzählen, wie man ein Forum führen sollte 😃

Ein Forum verfolgt die Hilfe zur Selbsthilfe.
Das Forum ist kein Ersatz dafür, dass Du Dich nicht mit den Grundlagen vertraut machen solltest.
Siehe auch: [Hinweis] Wie poste ich richtig?

Es geht mir wirklich nur darum, den Code zu vereinfachen und nicht bei jedem Aufruf eine Objektinitialisierung voranzuschreiben.

Das ist aber nun mal der grundlegende Sinn einer Objekt-orientieren Programmiersprache. Wenn Du es funktional möchtest, dann suchst Du evtl. eher eine Lösung mit F#.
Ansonsten der Verweis auf static - wobei schon der Ansatz "globale Verfügbarkeit" nicht das ist, was man tun sollte.

Ansonsten kann man wenig Feedback zu Deinem Code geben, weil Du nicht mal verrätst wo denn wirklich der Fehler auftritt und was Du wirklich tun willst. Vermutlich ist der gesamte Ansatz Käse.
Aber evtl hat Deine Anonymisierung vieles verfälscht.

Gerade wenn jemand Dich dafür bezahlt - übrigens trifft das auf die überwiegende Mehrzahl der Teilnehmer hier zu - erwartet derjenige eigentlich, dass Du es ordentlich machst.
Ob Du nun WiMi bist, nen Doktor, n Politiker oder nen Azubi bist; das mag für Dich vielleicht ein persönlicher Status sein bzw. bildest Dir was drauf ein, wenn Du es schon so deutlich erwähnst; interessiert hier aber niemanden und ist für den Sachverhalt auch irrelevant.

T
testc Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren

Wie du meinst,
hat jemand einen tatsächlich sinnvollen Beitrag?

Viele Grüße

T
2.219 Beiträge seit 2008
vor 5 Jahren

Ja, befolg die Anweisungen die man dir gibt.
Keiner von uns will seine Zeit verschwenden, wenn man nur Undank dafür bekommt.

Abt und und Th69 haben dich nach der Zeile gefragt in der es zu deinem Fehler kommt.
Diese hast du nicht gepostet und erwartest nun, dass alle deinen Code erraten dürfen.
Und wenn man dich darauf hinweist, haust du hier ganz schön arrogante Kommentare raus.
Dann brauchst du dich auch nicht wundern, dass dir keiner im Forum helfen wird.

Dein 0815 Wissen hat dir vielleicht einen Posten an einer Uni gebracht, aber wenn du schon an solch einem Fundamentalen Problem scheiterst und hier im Forum deshalb nach Hilfe schreien musst, dann müssen die Anforderungen der Uni recht gering sein.
Du bist weder der erste noch der letzte der solch ein simples Problem mit Namespaces hat und scheinbar das Problem nicht versteht.

Das Grundproblem ist hier, dass du vermutlich eine Klasse hast, die die gleiche Bezeichnung wie der aktuelle Namespace hat.
Und deshalb sagt die Meldung auch, dass ein Typ erwartet wird und kein Namespace.
Lässt sich lösen in dem du entweder den Namespace oder die Klasse umbenennst.
Dann kann C# auch deine Klasse wieder als Klasse und nicht als Namespace erkennen.

Natürlich wäre es für alle hilfreicher, wenn du die Stelle die dir der Compiler ankreidet auch mal posten würdest.
Wir kennen deinen Code nicht und können deshalb auch keine fundierten Rückschlüsse dazu geben.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

5.657 Beiträge seit 2006
vor 5 Jahren

Bei Kaufland drückt dir die Mitarbeiterin auch nicht einfach einen Katalog in die Hand wenn du schlussendlich nur wissen willst, wo die Bananen stehen

Wir sind doch nicht dein Personal. Keine Ahnung, wo du diese Anspruchshaltung her hast, aber geh bitte woanders stören.

Weeks of programming can save you hours of planning

Thema geschlossen