C# Befehle!

NewPenKid

Mitglied
Hallo liebe Leute,

Ich hab ein kleines Problem. Mein Ausbilder meinte das was ich bisher in C# programmiert habe ist nix besonderes. Also er meinte das gleiche hätte ich auch in C++ programmieren könne.

Er will von mir direkte C# Befehle. Also Befehle (Programme) die nicht in C++ machbar sind.

Hat da jemand vielleicht ein paar Tipps für mich

Also welche Befehle ich probieren sollte oder wo ich ein paar Bsp. herbekomme.

Wäre super nett.

Danke schon mal im Voraus!
 
Ich verstehe leider nicht genau, was dein Ausbilder von dir will.

Programme, die du in C# programmierst, kannst du eben auch zb in C++, VB(.NET) oder in anderen Sprachen schreiben. Nur der Weg dort hin ist mit einigen Sprachen eben länger, während er mit anderen Sprachen kürzer und einfacher ist.

Programme, die nur in einer einzigen Sprache realisierbar sind, gibt es fast nicht.


Oder eht es dir eher um Schlüsselwörter, die in anderen Sprachen nicht vorhanden sind und man diese dort anderes realisieren müsste?
Oder sollst du .NET-Klassen verwenden, die dir die Arbeit, die du in anderen Programmiersprachen hättest, schon fast abnehmen?

Er will von mir direkte C# Befehle. Also Befehle (Programme) die nicht in C++ machbar sind.
Also welche Befehle ich probieren sollte
Was genau verstehst du unter 'Befehlen' ?
 
Ähm danke erst mal für deine Schnelle antwort.

Sorry das ich das so unverständlich beschrieben habe.

Also:
Es gibt doch Methoden oder Klassen (usw) die es uns das Programmieren in C# leichter machen als in C++ da man nicht so viel Progr. muss. Glaub ich.
Genau die soll ich in einen kleinen Programm testen.

Wie funktionieren sie, was machen sie was ist anders.

Ich weiß leider nur nicht die Namen der Klassen oder hab keine Ahnung wie die funktionieren sollen.

Ich hoffe ich hab das jetzt verständlicher erklärt.
Liebe grüße.

Und danke im voraus für weiter Hilfe.
 
Hmm .. ganz verstehe ich es noch immer nicht.

Aber schau dir zum Beispiel mal den System.Xml Namespace an. Den gibts in C++ nicht, sondern müsste dort ausprogrammiert werden (soweit ich informiert bin).
 
Ein gutes Beispiel wäre hier denke ich auch die sichere Speicherfreigabe mit dem using-Schlüsselwort. Nach der Benutzung einer Klasse wird damit sofort die Dispose-Methode aufgerufen (Hier werden die Ressourcen der Klasse freigegeben, die dann vom Garbage Collecter 'entsorgt' werden).

Dazu ein kleines Codebeispiel:

Code:
public class CTuwas : IDisposable
{
     //Belegt viel Speicher und tut viel

     public void dispose()
     {
          //Hier wird wieder alles freigegeben
     }
}

public class CHauptklasse
{
     public static void Main()
     {
          using (CTuwas tuwas = new CTuwas() )
          {
               //Hier tut die Klasse irgendwas
          }

          // Hier ist wieder alles freigegeben 
          // dispose wurde aufgerufen
     }
}

Damit könntest du zb ein kleines Beispielprogramm schreiben.
 
Ich hab jetzt noch mal nachgefragt und er hat gemeint:

Zb irgendwas mit Hashtabellen. Oder zb. mit Referenzen arbeiten. Also wenn ich Parameter in einer Methode übergebe das ich nicht die Kopien übergebe sondern eine Referenz.

Hab aber mit sowas auch in C++ noch nie gearbeitet!

Vielen Dank für eure Hilfe (wollt ich euch noch sagen)
 
In einer Hashtable werden Elemente vom Typ Object gespeichert, die anhand eines Schlüssel, der in der Hashtable als Hashcode gespeichert wird, identifiziert werden.

Code:
using System;

namespace Hashtable_und_Referenzen
{
	class CHauptklasse
	{
		[STAThread]
		static void Main()
		{
			//Die 1. Hashtable wird erstellt
			System.Collections.Hashtable ht1 = new System.Collections.Hashtable(5);

			//Dei 2. Hashtable wird erstellt
			System.Collections.Hashtable ht2 = new System.Collections.Hashtable(5);

			//Hashtable 1 wird gefüllt
			ht1.Add("1","Wert 1 in ht1");
			ht1.Add("2","Wert 2 in ht1");
			ht1.Add("3","Wert 3 in ht1");
			ht1.Add("4","Wert 4 in ht1");
			ht1.Add("5","Wert 5 in ht1");

			//Hashtable 2 wird gefüllt
			ht2.Add(1,"Wert 1 in ht2");
			ht2.Add(2,"Wert 2 in ht2");
			ht2.Add(3,"Wert 3 in ht2");
			ht2.Add(4,"Wert 4 in ht2");
			ht2.Add(5,"Wert 5 in ht2");

			//Die Schlüssel beider Hashtables unterscheiden sich!	
			ZeigeWerte(ht1);
			ZeigeWerte(ht2);

			//Nun kopieren wir Referenz von ht2 in ht1
			ht1 = ht2;

			//Und ändern ein Element in Ht2
			ht2[4] = "Geänderter Wert";
			
			ZeigeWerte(ht1);
			ZeigeWerte(ht2);

			//Da der Verweis kopiert wurde, ist der Wert auch geändert wenn
			// man ht1 durchläuft, da dort auch nur der Verweis gespeichert ist

		}

		private static void ZeigeWerte(System.Collections.Hashtable ht)
		{
			//Elemente werden durchlaufen
			
			Console.WriteLine("Die Elemente der Hashtable");
			foreach (string elem in ht.Values)
			{
				Console.WriteLine(elem);
			}
			
			Console.WriteLine();
			Console.WriteLine("Die Hashcodes der Hashtable");


			//Hashcodes werden durchlaufen

			foreach (object elem in ht.Keys)
			{
				Console.WriteLine(elem.GetHashCode());
			}

			Console.ReadLine();
			Console.WriteLine();
			Console.WriteLine();
		}
	}
}

Der Zeigewerte Methode wird hier nur das Objekt übergeben, in dem die Referenz auf den Speicherbereich gespeichert ist.

Ich hoffe ich hab nun nicht deine Aufgabe für dich erledigt =)
Kannst ja noch ein bisschen was dran ändern.
 
Zuletzt bearbeitet:
Ich danke dir sehr.
Genau so was hat er gemeint. Ich werde mir das heute noch genauer durchsehen und versuchen mit dieser Funktion ein kleines Progrämmchen zu schreiben

Vielen Dank nochmal!
 
Da die 1 in "" steht. Rechnet dann diese Zeile

foreach (string elem in ht.Values)



den Hashcode selber aus? Oder sind das nur Zufallszahlen die rauskommen?

Code:
ht1.Add("1","Wert 1 in ht1");
"1" ist hier der Schlüssel (der als Hashcode gespeichert wird) für den Wert, der "Wert1 in ht1" ist.

Die Hashtable kann man nur mit der foreach Schleife durchgehen, weil kein integer-index vorhanden ist.

Für jedes element (elem), dass ein String ist und in ht.Values vorhanden ist, wird die Schleife ausgeführt und

Code:
Console.WriteLine(elem)

Gibt dann den Wert (nicht den Schlüssel) aus. Der Wert ist hier "Wert 1 in ht1"

Der Schlüssel, der als Hashcode gespeichert ist, wird mit

Code:
foreach (object elem in ht.Keys)
			{
				Console.WriteLine(elem.GetHashCode());
			}
ausgegeben.

Dort müssen die Objekte in als 'object'-Variable durchlaufen werden, da sie in einer Hashtable als integer, in der anderen als string gespeichert sind. Deshalb ergeben beides Hashtables auch unterschiedliche Hashwerte.


//EDIT:

Ich hab hier dann nochwas für dich, wenn du das mit den 'Referenzen übergeben' von deinem Ausbilder noch einbauen willst, falls du nicht genau wusstest was damit gemeint war. Gestern dachte ich, dass damit eben das normale Arbeiten mit Objekten gemeint war, aber mir ist dann als ich es gerade nochmal gelesen habe doch noch eingefallen, was damit wohl wirklich gemeint sein sollte :)

:

Code:
class CDemo
	{
		public void byValue(int i)
		{
			i++;
		}
	}
	
class Class1
	{
		
		static void Main()
		{
			CDemo demo = new CDemo();
			int i = 10;
			demo.byValue(i);

			// Hier ist i immernoch 10
			Console.WriteLine(i);
			Console.ReadLine();
		}
	}
Hier wird der Wert von i kopiert und wird innerhalb der Methode verwendet, außerhalb hat das auf diese Variable aber keinen Einfluss.
i wird "By Value" übergeben.



Code:
class CDemo
	{
		public void byRef(ref int i)
		{
			i++;
		}
	}
	
class Class1
	{
		static void Main()
		{
			CDemo demo = new CDemo();
			int i = 10;
			demo.byRef(ref i);

			// Hier ist i nun 11
			Console.WriteLine(i);
			Console.ReadLine();
		}
	}

Das Gleiche wie oben, nur das i 'by Reference" übergeben wird. Hiervon wird dann natürlich auch die 'äußere' Variable beeinflusst,
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück