Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.02.2013, 21:15

(C#) Bibliothek eingebunden, lässt sich aber nicht verwenden.

Hi

Ich lerne gerade C#, bin aber erst bei den Grundsätzen. Mein Problem ist, dass ich auf eine Methode einer eingebundenen Bibliothek nicht ordentlich zugreifen kann.
Das Script:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Logik;

namespace ConsoleApplication1
{ class Program 
 { static void Main(string[] args) 
 {
 bool a = true; 
 bool b = false; 
 bool c = Logik.Logik.AND(a,b); 

 Console.ReadKey(); 
 }}}



Es handelt sich bei der Bibliothek um einfache Logik-Schaltungen, die AND-Methode müsste true zurückgeben, wenn beide bools true sind. So sieht diese Methode in der Logik-Bibliothek aus:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
public bool AND(bool werta, bool wertb) 
{ 
 if(werta==true) 
{ 
 if(wertb==true) 
{ 
 return true; 
} 
} 
 return false; 
 }



Die .dll habe ich über die Verweise rechts eingefügt, aber interessant ist, dass bei "Logik.Logik.AND(a, b)" nur das zweite "Logik" diese bläuliche Farbe bekommt, das Erste bleibt schwarz.

Die Fehlermeldung lautet "Für das nicht statische Feld, die Methode oder die Eigenschaft "Logik.Logik.AND(bool, bool)" ist ein Objektverweis erforderlich
", aber daraus werde ich auch nicht schlau.
ich hoffe, ihr könnt mir helfen.

LG

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

04.02.2013, 21:17

Das erste Logik wird nicht blau weil es ein Namespace ist ;)

Und die Fehlermeldung sagt doch genau wo das Problem ist !?
Du brauchst ein Objekt vom Typ Logik mit dem du dann die AND methode aufrufen musst.

FSA

Community-Fossil

  • Private Nachricht senden

3

04.02.2013, 21:19

Ich kann zwar fast Null C#, aber hier mein Tipp: Logik.Logik, wenn du schon vorher using Logik hast? Ist das nicht zu viel "Logik"? Und brauchst du nicht ein Objekt von Logik?
Und:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
public bool AND(bool werta, bool wertb) 
{ 
 if(werta==true) 
{ 
 if(wertb==true) 
{ 
 return true; 
} 
} 
 return false; 
 }

Am besten schnell in

C#-Quelltext

1
2
3
4
5
6
7
8
public bool AND(bool werta, bool wertb) 
{ 
 if(werta && wertb) 
{
   return true;
} 
 return false; 
 }

Ändern.

Edit: Zu langsam :rolleyes:

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

4

04.02.2013, 21:21

Am besten schnell in

C#-Quelltext

1
2
3
4
5
6
7
8
public bool AND(bool werta, bool wertb) 
{ 
 if(werta && wertb) 
{
   return true;
} 
 return false; 
 }

Ändern.


Also wenn dann bitte direkt

C#-Quelltext

1
2
3
4
public bool AND( bool werta, bool wertb )
{
   return werta && wertb;
}

FSA

Community-Fossil

  • Private Nachricht senden

5

04.02.2013, 21:23

Das ist weniger nachvollziehbar. War schon Absicht. Aber ja, das ist besser :D
BTW: Was ist denn schon wieder mit der Formatierung? Da klappt bei mir ja garnichts.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

04.02.2013, 22:12

da er anscheinend noch nicht sonderlich lange am Programmieren ist formuliere ich das, was meine Vorposter bereits geschrieben haben, mal ein wenig ausführlicher:
eine normale Methode kann man nur über ein Objekt bzw. eine Instanz einer Klasse aufrufen. Wenn man beispielsweise die Zeile

C#-Quelltext

1
Logik logik = new Logik();
hat, dann kann man über logik auf die Methoden zugreifen, wie beispielsweise mit

C#-Quelltext

1
logik.AND(true, false);

Da du aber vermutlich nicht erst eine Instanz erzeugen möchtest, sondern die Methode direkt aufrufen willst, musst du aus der Methode eine statische Methode machen, indem du das Schlüsselwort static verwendest. Dadurch wird ein Aufruf wie folgender möglich:

C#-Quelltext

1
Logik.AND(true, false);

Solltest du nicht wissen, was mit "Instanz" oder "Objekt" gemeint ist, heißt das, dass du noch ein weniger weiterlernen musst (indem du hoffentlich in dem Buch weiterliest, welches du zum Lernen verwendest ;) ).

Die Formatierung des Quelltexts macht grundsätzlich dann Probleme, wenn man beim Schreiben des Beitrags den Tab "Editor" und nicht den Tab "Quellcode" verwendet. Aber das haben wir eigentlich schon vor langer Zeit in einem anderen Thema festgestellt...
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sacaldur« (05.02.2013, 23:23)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

05.02.2013, 06:42

Das ist weniger nachvollziehbar. War schon Absicht. Aber ja, das ist besser :D
BTW: Was ist denn schon wieder mit der Formatierung? Da klappt bei mir ja garnichts.

Weniger nachvollziehbar? In wie fern? Die Methode heißt "And", die Operation ebenfalls. Übrigens würde ich an der Stelle nur ein & platzieren, auch wenn's wohl für einen cleveren Compiler egal ist ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

05.02.2013, 14:28

Erstmal danke für die Hilfe! :)

"Objekt" sagt mir bei C# noch nicht so viel, weshalb ich Sacaldurs Tipp nachgehe und erst weiterlerne^^ Ich kann ja später darauf zurückkommen.
Dein Script (also das Erste) funtioniert nur nicht, mir wird gesagt "Logik" ist ein(e) "Namespace", wird aber wie ein(e) "Typ" verwendet.".


LG

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

05.02.2013, 18:10

Dein Script (also das Erste) funtioniert nur nicht, mir wird gesagt "Logik" ist ein(e) "Namespace", wird aber wie ein(e) "Typ" verwendet.".

Das liegt dann wohl an der gleichen Benennung von Namespace und Klasse. Irgendwie muss der Compiler sich ja entscheiden, ob damit die Klasse oder das Namespace gemeint ist und offenbar geht die Definition wohl dahin, dass in einem solchen Fall immer das Namespace gemeint ist. Du könntest ja das Namespace oder die Klasse umbenennen und schon musst du nur noch den Klassennamen verwenden, wenn das using angegeben ist. Zum umbebennen noch der Hinweis: in Visual Studio kann man über Rechtsklick -> Umgestalten -> Umbenennen bzw. auf Englisch Rechtsklick -> Refactor -> Rename den Namen an jeder verwendeten Stelle anpassen. ;)

Mit der Zeit dürftest du wohl auch etwas bessere Entscheidungen bei der Benennung treffen, das ist einfach eine Sache der Erfahrung. ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

FSA

Community-Fossil

  • Private Nachricht senden

10

05.02.2013, 19:52

@BC: Ja, denn ich weiß nie wie fortgeschritten der Gegenüber ist ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige