Hallo zusammen,
gibt es die Möglichkeit Objekte mit einem Index zu versehen und dann abzurufen? Ich habe ein wenig gegoogelt, aber da kam als Antwort immer, dass man einfach ein Array oder eine Liste verwenden soll. Ich würde aber gerne wissen, ob sowas auch mit einem Objekt möglich ist.
Ich würde gerne mehrere Objekte erstellen, z.B. Fahrrad
F
ahrrad fahrrad1 = new Fahrrad();
Fahrrad fahrrad2 = new Fahrrad();
Fahrrad fahrrad3 = new Fahrrad();
Fahrrad fahrrad4 = new Fahrrad()
;
Und diese Objekte würde ich gerne mit einem Index abrufen, z.B. fahrrad_
Wie funktioniert sowas?
Und kann man auch die Anzahl der erstellten Objekte abrufen? z.B. fahrrad.count ?
Ich verwende folgenden Quellcode, der aber nicht funktioniert.
using System;
namespace Kapitel8_OOP_Übungsaufgabe_S102
{
class Fahrrad
{
public int nummer;
public string typ;
public double preis;
public string farbe;
}
class Program
{
static void Main(string[] args)
{
Fahrrad fahrrad1 = new Fahrrad();
fahrrad1.nummer = 1;
fahrrad1.typ = "Cube Nature";
fahrrad1.preis = 490.99;
fahrrad1.farbe = "grün";
Fahrrad fahrrad2 = new Fahrrad();
fahrrad2.nummer = 2;
fahrrad2.typ = "Radon Scart";
fahrrad2.preis = 699.99;
fahrrad2.farbe = "blau";
Fahrrad fahrrad3 = new Fahrrad();
fahrrad3.nummer = 3;
fahrrad3.typ = "Radon ZR Race";
fahrrad3.preis = 990;
fahrrad3.farbe = "schwarz";
for (int i = 1;i<4;i++)
{
Console.WriteLine(Fahrrad(i).nummer);
Console.WriteLine(Fahrrad[i].typ);
Console.WriteLine(Fahrrad[i].preis);
Console.WriteLine(Fahrrad[i].farbe);
}
}
}
}
lg
Hallo,
Du bist ja hier um Hilfe zu bekommen, daher wäre es super, wenn Du Dich auch an [Hinweis] Wie poste ich richtig? halten würdest 👍
Und dazu gehört, dass Du zum Beispiel den Code nicht einfach rein klatscht, sondern den Code in die Tags passt, sodass potentieller Helfer sich nicht mit unformatiertem Plaintext rumschlagen müssen.
Danke 😉
--
Letzten Endes sprichst Du aber von Arrays.
Arrays gehören zu den absoluten Grundlagen von Programmiersprachen, auch in C#.
Meistens ist das sooo Grundlagenbehaftet, dass das in den Schulklassen in der Regel bereits in der ersten Stunde behandelt wird.
Daher leg ich Dir mal [FAQ] Wie finde ich den Einstieg in C#? nahe.
ob sowas auch mit einem Objekt möglich
Sobald Du verstanden hast, was ein Objekt und was ein Array ist wirst Du merken, dass das mit einem Objekt so gar nicht funkionieren kann - sondern eben mit Arrays und Listen.
_ ist quasi der Zugriff auf ein bestimmtes Element anhand des Index i in einem Array - das kann mit einem Objekt so gar nicht funktionieren.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Nochmal eben als Anmerkung, dass dein Code oben auch noch weitere Fehler enthält.
Du erstellst zwar 4 Fahrräder aber überschreibst immer die Eigenschaften des Fahrrad1.
@Abt
Alles klar, sorry. Beim nächsten Mal verwend ich Tags für den Code!
Ich arbeite momentan ein C# Grundlagen Buch von vorne bis hinten durch und Arrays und Listen hab ich bereits hinter mir. Ich weiß, dass es damit auch möglich ist. Ich wollte eben interessenshalber nur nachfragen, ob man das von mir genannte Beispiel auch mit Objekten und einem Index lösen kann.
@Thomas
Ja richtig, der Code sollte natürlich folgendermaßen lauten:
Habe es im Topicthread geändert!
Und nutzte bitte auch die Einrückungen.
So ist es echt ein Krampf den Code zu lesen 😦
Auch wäre es sinnvoller gewesen den Startbeitrag anzupassen anstelle den angepassten nochmal in einem eigenen Kommentar einzufügen.
Bitte bearbeite den Startbeitrag, liest sich dann für alle angenehmer.
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.
Hallo, schau dir mal diesen Beitrag an:
[FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls
Ich habs jetzt in einer neuen Übungsaufgabe über Umwege gelöst. War zwar nicht genau das, was ich ursprünglich vor hatte, aber es erfüllt den selben Zweck. Ich habe nämlich davor nicht gewusst, dass man Objekte auch zu Listen hinzufügen kann. Somit habe ich quasi einen Kompromiss gefunden. Falls es jemanden interessiert, hier der Code:
using System;
using System.Collections.Generic;
namespace Uebungsbeispiel1_S._120
{
// Klasse Fahrrad wird erstellt
class Fahrrad
{
// Membervariablen der Klasse Fahrrad werden deklariert
public int laufrad;
public int rahmenhoehe;
public string farbe;
public string fahrradtyp;
// Methode innerhalb der Klasse Fahrrad wird erstellt
public void memberAusgeben()
{
Console.WriteLine("Laufrad: " + this.laufrad);
Console.WriteLine("Rahmenhoehe: " + this.rahmenhoehe);
Console.WriteLine("Farbe: " + this.farbe);
Console.WriteLine("Fahrradtyp: " + this.fahrradtyp);
}
// Methode setLaufrad wird erstellt
public void setLaufrad(int laufrad)
{
this.laufrad = laufrad;
}
// Methode setRahmenhoehe wird erstellt
public void setRahmenhoehe(int rahmenhoehe)
{
this.rahmenhoehe = rahmenhoehe;
}
// Methode setFarbe wird erstellt
public void setFarbe(string farbe)
{
this.farbe = farbe;
}
// Methode setFahrradtyp wird erstellt
public void setFahrradtyp(string fahrradtyp)
{
this.fahrradtyp = fahrradtyp;
}
}
class Program
{
static void Main(string[] args)
{
// Liste mit Objekten der Klasse Fahrrad wird erzeugt
List<Fahrrad> Fahrraeder = new List<Fahrrad>();
char weiter = 'j';
int zaehler = 0;
while(weiter == 'j')
{
// Ein Objekt der Klasse Fahrrad wird zur Liste Fahrraeder hinzugefuegt
Fahrraeder.Add(new Fahrrad());
Console.WriteLine("Geben Sie die Laufradgroesse ein:");
Fahrraeder[zaehler].setLaufrad(int.Parse(Console.ReadLine()));
Console.WriteLine("Geben Sie die Rahmenhoehe ein:");
Fahrraeder[zaehler].setRahmenhoehe(int.Parse(Console.ReadLine()));
Console.WriteLine("Geben Sie die Farbe ein:");
Fahrraeder[zaehler].setFarbe(Console.ReadLine());
Console.WriteLine("Geben Sie den Fahrradtyp ein:");
Fahrraeder[zaehler].setFahrradtyp(Console.ReadLine());
zaehler++;
Console.WriteLine("Wollen Sie ein weiteres Fahrrad erstellen?");
weiter = char.Parse(Console.ReadLine());
}
// Alle Objekte in der Liste werden abgerufen
foreach(Fahrrad f in Fahrraeder)
{
// Jedes Objekt in der Liste gibt seine Membervariablen aus
f.memberAusgeben();
}
// Anzahl gespeicherter Objekte wird ausgegeben
Console.WriteLine("Fahrraeder Count: " + Fahrraeder.Count);
}
}
}
Hier ein paar Verbesserungsvorschläge.
1.Stelle die public Felder auf Eigenschaften um.
2.Die set* Methoden können raus, dafür hat C# die Eigenschaften!
3.In deiner Klasse Program sollte die Liste fahrraeder heißen, hier bitte mal die Doku prüfen.
4.Du brauchst keinen char zum prüfen ob die Schleife abgebrochen werden soll. Hier kannst du direkt den String von ReadLine entgegennehmen und prüfen!
5.Die Parse Methoden werden bei Falscheingaben immer knallen, nutzt dafür TryParse mit Prüfung auf den Rückgabewert um zu schauen ob die Eingabe gültig ist.
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.