C#: Instanz zur Laufzeit erstellen?

Gast #2282304
Lesenswert?

Hallo,
Google konnte mir nicht weiterhelfen, da ich vermutlich mit den falschen 
Wörtern suche...

Meine Frage(n):
Wie kann ich während mein Programm ausgeführt wird eine Instanz 
erstellen?
Wie wird der Name vergeben?

Instanz1, Instanz2, Instanz3,... würde schongenügen.


Vielen Dank schon im Vorhinein!
Andreas
#2282345
Lesenswert?

Andreas schrieb:
> Danke für die schnelle Antwort PeterII!
> Mit Instanz meine ich ein Objekt einer Klasse. Verwechsle ich da etwas?

> Wie kann ich während mein Programm ausgeführt wird eine Instanz
> erstellen?
> Wie wird der Name vergeben?

> Instanz1, Instanz2, Instanz3,... würde schongenügen.

var Instanz1 = new Klasse();
var Instanz2 = new Klasse();

var aList = new List<Klasse>();
aList.Add(new Klasse());

var aDictionary = new Dictionary<string, Klasse>();
aDictionary.Add("Name", new Klasse());

oder was war die Frage?
Gast #2283281
Lesenswert?

Der Instanzname "lebt" nur lokal im Eventhandler und wird bei verlassen 
wieder zerstört (Destruktor wird gerufen).

Du legst dabei aber mit der zeile:
arrayMitInztanzen[aktuellerIndex] = instanz;

eine Kopie dieses Objekts in Dein Array.
Damit bleibt die Kopie erhalten (natürlich nur wenn Dein Array nicht 
auch nur innerhalb des Eventhandlers existiert.
#2284911
Lesenswert?

Ich würde es so machen:
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Linq;
7
using System.Text;
8
using System.Windows.Forms;
9

10
namespace WindowsFormsApplication7
11
{
12
    public partial class Form1 : Form
13
    {
14
        Myclass[] objects=new Myclass[0];
15
        public Form1()
16
        {
17
            InitializeComponent();
18
        }
19

20
        private void button1_Click(object sender, EventArgs e)
21
        {
22
            Myclass[] temp = new Myclass[objects.Length + 1];
23
            for (int i = 0; i < objects.Length; i++) temp[i] = objects[i];
24
            temp[objects.Length] = new Myclass(); 
25
            objects = temp;
26
        }
27
    }
28
    public class Myclass
29
    { 
30
    }
31
}
Gast #2284929
Lesenswert?

A. V. schrieb:
> Ich würde es so machen:
geht nicht nocht komplizierter?

1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Text;
6
using System.Windows.Forms;
7

8
namespace WindowsFormsApplication7
9
{
10
    public partial class Form1 : Form
11
    {
12
        List<Myclass> objects = new List<Myclass>();
13
        public Form1()
14
        {
15
            InitializeComponent();
16
        }
17

18
        private void button1_Click(object sender, EventArgs e)
19
        {
20
            objects.add( new Myclass() );
21
        }
22
    }
23
    public class Myclass
24
    { 
25
    }
26
}
#2284939
Lesenswert?

Peter II schrieb:
> geht nicht nocht komplizierter?

-> Fehler  1 
"System.Collections.Generic.List<WindowsFormsApplication7.Myclass>" 
enthält keine Definition für "add", und es konnte keine 
Erweiterungsmethode "add" gefunden werden, die ein erstes Argument vom 
Typ "System.Collections.Generic.List<WindowsFormsApplication7.Myclass>" 
akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) 
c:\users\kra5h\documents\visual studio 
2010\Projects\WindowsFormsApplication7\WindowsFormsApplication7\Form1.cs 
20  21  WindowsFormsApplication7


^^also meins funzt.. ;)
Gast #2285353
Lesenswert?

Andreas schrieb:
> Danke für all eure Bemühungen und raschen Antworten!
> Die Lösung von PeterII ist genau das was ich gesucht habe!

Du könnstest mal etwas mehr über dein Objekt sagen. Warum braucht du 
noch eine Referenz darauf?
Wenn du die Referenz nicht verwendest, verhindest du damit das der 
Speicher wieder frei gemacht wird.

Kann es sein das du ein Formular dort neu anlegst?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren