Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von herbivore
Thema: class ist referenz, wie leitet man ab ?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Ingo,

die Doku sagt:

Zitat
Die Werttypen sind in zwei Hauptgruppen unterteilt:

- Strukturtyp
- Enumerationstyp

Strukturtypen umfassen benutzerdefinierte struct-Typen und folgende integrierte einfache Typen:

- Numerische Typen
- - Ganzzahlige Typen
- - Gleitkommatypen
- - decimal
- bool
und
Zitat
In Variablen von Verweistypen, die auch als Objekte bezeichnet werden, werden Verweise auf die tatsächlichen Daten gespeichert. In diesem Abschnitt werden die folgenden Schlüsselwörter eingeführt, mit denen Verweistypen deklariert werden:

- class
- interface
- delegate

Darüber [hinaus gibt es] [...] die folgenden integrierten Verweistypen [...]:

- object
- string

Sieht also schlecht aus. Ich würde momentan "die meisten benutzerdefinieren Klassen" in "alle benutzerdefinierten Klassen" ändern wollen. Vielleicht kann man aber auch über "integrierten Verweistypen" was machen.

herbivore

Thema: class ist referenz, wie leitet man ab ?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Ingo,

wohl ein Missverständnis. Ich meinte nicht die Info über den Indexer, sondern nur den einen offtopic darin enthaltenen Beitag über Wert- und Verweis-Typen.

herbivore

Thema: class ist referenz, wie leitet man ab ?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Ingo,

vielleicht hilft dir schon mal etwas, was ich gerade in Indexer bei Array von Objekten verwenden zu Wert- und Verweis-Typen geschrieben habe.

herbivore

Thema: Indexer bei Array von Objekten verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo schock,

deine Verwirrung sollte sich klären, wenn du weißt, dass es in C# Wert-Typen (z.B. int, double, u.ä.) und Verweis-Typen (Object, FileStream und auch die meisten benutzerdefinierten Klassen) gibt.

Erzeugt man eine Variable eines Wert-Typs, ist darin Platz um den Wert aufzunehmen.

Erzeugt man eine Variable eines Verweis-Typs, ist darin Platz einen *Verweis* auf eine Objekt aufzunehmen. Dieser Verweis kann null sein, also die Variable enthält kein bzw. verweist auf kein Objekt.

Und ein Array ist ja einfach nur ein Feld von Variablen. Bei Wert-Typen hast du ein Feld von Werten und bei Verweis-Typen ein Feld von Verweisen (die eben zu Anfang alle null sind, also kein Objekt enthalten).

Weil int ein Wert-Typ ist und deine Klasse ein Verweis-Typ, erklärt sich der Unterschied.

herbivore

Thema: Dll in Prozess
Am im Forum: Rund um die Programmierung

Hallo herbivore,

da die Methoden für DLL Injection alle auf globalen Hooks oder anderen betriebssystemnahen Techniken wie CreateRemoteThread aufsetzen, musst du wohl mit DllImport darauf durchgreifen. In .NET direkt gibts das nicht. Die Schwierigkeit ist nur, dass die Win32-Funktionen, die du dann benutzt, evtl. nicht mit dem C#-DLL-Format klarkommen. Ich würde die Finger davon lassen. Aber vielleicht hast du ja Erfolg.

herbivore

Thema: Dll in Prozess
Am im Forum: Rund um die Programmierung

Hallo Dooki,

man lernt doch nie aus.

Da dir vermutlich bewusst ist, dass die von dir gewünschte Technik effektiv für Schadensprogramme eingesetzt werden kann, wirst du verstehen, warum ich nach dem geplanten Einsatzzweck deiner Software frage.

herbivore

Thema: Dll in Prozess
Am im Forum: Rund um die Programmierung

Hallo Dooki,

so 'rum geht es auch nicht. Nur der Prosess selbst kann die DLLs landen.

Wenn du diese Richtung gemeint hast, dann schreib bitte, was das für DLLs sind (z.B. C#, C++, C) und was für ein Prozess (C#?).

herbivore

Thema: Graphicsobjekt verschwindet bei Fensterwechsel
Am im Forum: GUI: Windows-Forms

Hallo Fragender,

ich verstehe die Frage nicht genau.

Meinst du das Setzen einer Hintergrundfarbe?


SolidBrush sb = new SolidBrush (Color.Irgendwas);
graphCanvas.FillRectangle (sb, 0, 0, iWidth, iHeight);
picbCanvas.Invalidate ();
picbCanvas.Update ();
Oder das gar kein Bild mehr angezeigt werden soll?


picbCanvas.Image = null;

herbivore

Thema: Indexer bei Array von Objekten verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo norman_timo,

auch wenn das etwas Off-Topic ist:

Wenn du sowas willst wie öffentliche Instanzvariablen, dann solltest dafür Eigenschaften verwenden.

Also statt


public int iGewicht;

besser


private int iGewicht;

public int Gewicht {
   set { iGewicht = value; }
   get { return iGewicht; }
}

Damit werden u.a. spätere Änderungen erleichtert, weil man bei jedem Setzen und Abrufen der "Variablen" die Kontrolle bekommt und dort z.B. später zusätzlichen Code einfügen kann.

herbivore

Thema: C# und Textdateien
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo tribal,

Substring ist hier auf jeden Fall nicht so passend, weil man ja mit Trennzeichen und Texten variabler Länge zu tun hat und nicht mit (festen) Positionen und Längen, wie sie bei Substing als Parameter übergeben werden. Natürlich kann man die Positionen mit IndexOf bestimmen, aber da gibt es bessere Lösungen (s.o.).

herbivore

Thema: Graphicsobjekt verschwindet bei Fensterwechsel
Am im Forum: GUI: Windows-Forms

Hallo Fragender,

also noch mal als Basisinformation: In dem Code oben funktioniert die Aktualisierung wie sie soll.

Wenn an die PictureBox eine Bitmap gehängt wird, übernimmt die PictureBox wie gesagt alle Aktualisierungen aufgrund Fensterreihenfolgewechseln, Fensterverschieben u.ä. automatisch.

Nicht aktualisiert wird, wenn du nachträglich (nach der Zuweisung an PictiureBox.Image) in die Bitmap malst. Dann ist anschließend


picbCanvas.Invalidate (); // der Einfachheit wegen alles invalid setzen
picbCanvas.Update ();
fällig.

HTH

herbivore

Thema: Indexer bei Array von Objekten verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallol norman_timo,

nur verwirr den armen schock doch nicht:

1. mit


Array oo = new Array (7);
erreicht man quasi das gleich wie mit:


c[] oo = new c[7];

nur das durch die - zweite in diesem Fall bessere - Variante klargestellt ist, dass die Array-Elemente vom Typ c sind. Die Anweisung von schock geht also voll in Ordnung.

Was aber in der Tat richtig ist, ist das in den erzeugten Feldern (Array bzw. c[]) noch keine Objekte enthalten sind. Will man diese erzeugen, kann man so eine Schleife verwenden, wie du das machst.

2. Was schock verwendet, ist die Definition eines Indexers. Das this an dieser Stelle ist einfach Teil der Syntax und bedeutet nicht, was es an anderen Stellen bedeutet. Das geht also auch voll in Ordnung. Außerdem ist ja auch gerade der Titel der Frage "Indexer bei Array von Objekten verwenden".

3. Instanzvariablen öffentlich zu machen ist (in der Regel) ein Verstoß gegen die Kapselung der Objeke; eine der grundlegenden Eigenschaften der Objektorientierung. Also bring schock hier nichts falsches bei. So wie er das gemacht hat, geht das voll in Ordnung.

herbivore

Thema: Indexer bei Array von Objekten verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo schock,

und wie das funktioniert, hier mal der Code als Ganzes:


using System;
using System.Collections;

class c
{
   private string[] s = new string[3];
   public string this [int i]
   {
      set
      {
         s[i] = value;
      }
   }
}

abstract class App
{
   public static int Main (string [] astrArg)
   {
      c o = new c ();

      o [1] = "Hallo Welt!";

      c [] oo = new c [7];

      oo [4] = new c ();

      oo [4] [1] = "Hallo";

      return 0;
   }
}

oo [4] liefert das fünfte Objekt in oo und das folgende [1] ist dann der Indexerzugriff auf ebendieses Objekt.

Ein Zugriff auf ein mehrdimensionales Array (von Strings) würde in C# sowieso anders aussehen, nämlich so:


oo [4,1] = "Hallo";

herbivore

Thema: Graphicsobjekt verschwindet bei Fensterwechsel
Am im Forum: GUI: Windows-Forms

Hallo Fragender,

mit dem Code, den ich oben gepostet habe. Also mit einer Bitmap zwischen PictureBox und Graphics.

herbivore

Thema: C# Compiler...
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo norman_timo,

nee, da werden keine temporären Dateien angegeben, man kommt also komplett ohne .cs-Dateien aus. Complier.Compile braucht lediglich die *Namen*, z.B. damit er in Fehlermeldungen darauf Bezug nehmen kann.

herbivore

Thema: DLL dynamisch laden
Am im Forum: Rund um die Programmierung

Hallo Xqgene,

dass ist wohl dem Forumsparser geschuldet, der Backslashes verschluckt.

herbivore

Hinweis 08.04.2006: Der Forumsparser wurde geändert und zeigt die Backslashes nun wieder an.

Thema: Umlaute und Text anhängen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Justin-d-Sohr,

wenn du mit


StreamWriter sw = File.AppendText(path));
einen StreamWriter zurückbekommst, kannst du doch per StreamWriter.Encoding setzten, was du brauchst, bevor du den Text ausgibst.

HTH

herbivore

Thema: C# Compiler...
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo norman_timo,

Zitat
Dass dieser (Verzeihungsmile blöde Compiler wirklich als String den Sourcecode haben will, das ist mir nun wirklich nicht in den Sinn gekommen. (Wie umständlich ;.))

hm, das sehe ich genau andersherum. In meinem Beispiel oben steht der Code zwar auch in einer Datei, aber den eigentlichen Einsatzzweck für Compiler.Compile sehe ich darin, automatisch erzeugten Code zu übersetzen. Und dann spart man sich eben irgendwelche temporären Dateien anlegen zu müssen, sondern kann direkt übersetzen. (Sehr komfortabel ;.))

herbivore

Thema: C# Compiler...
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo norman_timo,


using System;
using System.IO;
using Microsoft.CSharp;

abstract class App
{
   public static int Main (string [] astrArg)
   {

      String [] strSrcFiles = new String [1];
      String [] strSrcNames = new String [1];
      String    strOutName;

      strSrcNames [0] = "hello.cs";
      strOutName = "hello.exe";
      StreamReader sr = new StreamReader (strSrcNames [0]);
      strSrcFiles [0] = sr.ReadToEnd ();

      Microsoft.CSharp.Compiler.Compile (strSrcFiles,
                                         strSrcNames,
                                         strOutName,
                                         null,
                                         null);


      return 0;
   }
}

übersetzt bei mir problemlos die Datei hello.cs.

HTH

herbivore

Thema: Altes Consolen C++ Prog -> C# Prog, No Flush Problem
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo charlkef,

zu [Frage 1]

Ob einen Programm auf Console oder Datei ausgibt, kann man mit z.B. mit der Win32-Funktion GetFileType ermitteln. In der Doku dieser Funktion steht zu den Rückgabewerten zu lesen:

Zitat
FILE_TYPE_UNKNOWN: The type of the specified file is unknown.
FILE_TYPE_DISK: The specified file is a disk file.
FILE_TYPE_CHAR: The specified file is a character file, typically an LPT device or a console.
FILE_TYPE_PIPE: The specified file is either a named or anonymous pipe.

Das würde ich mal so interpretieren, dass ein Programm bei FILE_TYPE_CHAR nicht unterscheiden kann, ob es auf Console oder Drucker ausgibt. Wenn man also eine Drucker-Port (LPTx) einrichtet und (per Druckertreiber?) an dessen Daten lauscht ... vielleicht geht ja was in dieser Richtung.

zu [Frage 2]:

Die Knowledgebase sagt doch gerade, dass die C-Bibliothek ihre eigene Pufferverwaltung hat. Hier sehe ich erstmal keinen Ansatz, schon gar nicht von außen, lasse mich aber gerne vom Gegenteil überzeugen.

HTH

herbivore

Thema: keyboard events
Am im Forum: GUI: Windows-Forms

Hallo malcolm,

ich denke mit Control.KeyDown bzw. Control.KeyUp bist du besser bedient als mit KeyPress. In den KeyEventArgs (statt KeyPressEventArgs) gibt es KeyData. Darin findest du, was du brauchst (Keys-Enumeration).

HTH

herbivore

Thema: Exception beim Löschen von Objekten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Hundertwasser,

eine NullReferenceException sollte nicht so schwer zu beheben sein, wenn man erstmal weiß, welche Variable null ist. Das solltest du herausfinden; per Debugger oder notfalls durch try-catch um jede einzelne Anweisung im Konstruktor.

Ansonsten ist da von Ferne nicht viel zu machen.

HTH

herbivore

Thema: Altes Consolen C++ Prog -> C# Prog, No Flush Problem
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo charlkef,

ich kann dir leider wenig Hoffnung machen. Ich denke auf die Aussagen von Knowledgebase-Artikeln kann man sich ziemlich verlassen.

Auch [Ansatz 3] ist kein Argument, weil ja die C-Bibliothek weiß, ob sie auf die Console ausgibt oder in eine Pipe schreibt (sowas kann man sogar selbst abfragen). Ich denke das Pufferverhalten wird eben genau drauf "angepasst". Wenn du in deinem Testprogramm mal sehr viel Text ausgibst, wirst du sehen, dass die Daten in die Pipe geschrieben werden, sobald der Puffer voll ist - und nicht erst beim Terminieren des Testprogramms.

Was [Ansatz 1] angeht, kann ich zumindest vermelden, dass bei mir (Win2000 SP4) das Verhalten so ist, wie in der Knoledgebase beschrieben, also flush nach jeder Zeile. Ich denke das ist also deine einzige Chance.

HTH

herbivore

Thema: Panel als Parameter
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo malcolm,

ich vermute, die Zeile


Snake s = new Snake (this.panel1);

steht in eine Static-Methode (oder direkt in der Klasse) und von dort hast zu keinen Zugriff auf die Instanzvariable panel1, weil die ja immer zu einem bestimmten Objekt gehört.

Wenn du die Zeile z.B. in den (Objekt-)Konstruktor deines Forms schreibst, sollte es gehen.

HTH

herbivore

PS: Cool, da haben sich ja drei gleichbedeutende Antworten überschnitten. Leider bin ich nur dritter, schüfts.

Thema: Indexer bei Array von Objekten verwenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo

mit


oo [4] [1] = "Hallo";
allerdings hast du mit


class[] oo = new c[7];
erst ein Arrray für sieben c-Objekte erzeugt. Es sind noch keine Objekte drin! Damit die Zuweisung oben auch funktioniert, braucht es mindestens noch:


oo [4] = new c ();

HTH

herbivore

Thema: Formzugriff auf die aufrufende Funktion
Am im Forum: GUI: Windows-Forms

Hallo Hundertwasser,

Suchworte: Form1 Form2

herbivore

Thema: mono c# code in .net c# code
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo x-sharp,

wenn die gtkembedmoz.dll nicht in C:\Programme\Gemeinsame Dateien\GTK\2.4\bin liegt, dann muss der Pfad zur gtkembedmoz.dll auch noch in PATH.

Wenn die gtkembedmoz.dll in C:\Programme\Gemeinsame Dateien\GTK\2.4\bin liegt, dann sollte der Eintrag reichen. In PATH werden nur Verzeichnisse eingetragen, keine einzelnen Dateien oder DLLs.

herbivore

Thema: Tab Control / NotifyIcon
Am im Forum: GUI: Windows-Forms

Hallo stift,

bei allem Verständnis für Anfänger: Wenn es dir schon *alles* so vorgekaut wird: Irgendwann musst du mindestens mal selbst runterschlucken, um statt zu werden.

herbivore

Thema: mono c# code in .net c# code
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo x-sharp,

du trägst den Pfad nicht ein, und wir rätseln hier, tztztz.

Start / Einstellungen / Systemsteuerung / System / Reiter Erweitert / Button Umgebungsvariablen / Variable Path in einer der Listen markieren / Button Bearbeiten ... / neuen Pfad durch Semikolon gretrennt hinten anhängen / ok,ok,ok

HTH

herbivore

Thema: Icons aus EXE-/DLL-Datei extrahieren
Am im Forum: Rund um die Programmierung

Hallo fusionwedge,

die Pfade der Icons stehen schon in der Registry. Für z.B. .txt-Dateien guckst du unter HKEY_CLASSES_ROOT\.txt und findest im Standardwert den Eintrag txtfile. Damit guckst du jetzt unter HKEY_CLASSES_ROOT\txtfile\DefaultIcon und findest dort "%SystemRoot%\system32\shell32.dll,-152" also das Icon mit dem Index 152 in der Datei %SystemRoot%\system32\shell32.dll. Die Icons müssen in der DLL als Win32-Ressourcen gespeichert sein, um auf diese weise ansprechbar zu sein.

HTH

herbivore