myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » C# Namespace und Zugriff auf Klasse
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

geschlossen (weitere Infos)
Zum Ende der Seite springen  

C# Namespace und Zugriff auf Klasse

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
testc
myCSharp.de-Mitglied

Dabei seit: 02.11.2018
Beiträge: 4


testc ist offline

C# Namespace und Zugriff auf Klasse

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Guten Tag,

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

C#-Code:
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

C#-Code:
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?

C#-Code:
public void first()
{
  //do something
  o.func()
}

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

Vielen Dank und ein schönes Wochenende!
Neuer Beitrag 02.11.2018 14:00 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.470
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo und willkommen,

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

C#-Code:
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.
Neuer Beitrag 02.11.2018 14:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
testc
myCSharp.de-Mitglied

Dabei seit: 02.11.2018
Beiträge: 4

Themenstarter Thema begonnen von testc

testc ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

C#-Code:
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!

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von testc am 02.11.2018 16:22.

Neuer Beitrag 02.11.2018 16:19 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.470
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

In welcher Zeile wird denn der Fehler angezeigt?

Evtl. fehlt einfach der Namespace, also

C#-Code:
// 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).
Neuer Beitrag 02.11.2018 16:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.458
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
Neuer Beitrag 02.11.2018 16:33 Beiträge des Benutzers | zu Buddylist hinzufügen
testc
myCSharp.de-Mitglied

Dabei seit: 02.11.2018
Beiträge: 4

Themenstarter Thema begonnen von testc

testc ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von testc am 02.11.2018 16:42.

Neuer Beitrag 02.11.2018 16:36 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.458
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?

Zitat von testc:
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.
Neuer Beitrag 02.11.2018 16:46 Beiträge des Benutzers | zu Buddylist hinzufügen
testc
myCSharp.de-Mitglied

Dabei seit: 02.11.2018
Beiträge: 4

Themenstarter Thema begonnen von testc

testc ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Viele Grüße
Neuer Beitrag 02.11.2018 17:15 Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.405
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 02.11.2018 18:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.300
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von testc:
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.
Neuer Beitrag 02.11.2018 21:42 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
geschlossen (weitere Infos)


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 23.02.2020 02:05