Entwickler-Ecke

C# - Die Sprache - Static und nicht static


storestore - So 18.09.11 10:43
Titel: Static und nicht static
Hallo,
ich habe mal eine Frage: Kann mir einer vlt. Den Unterschied zwischen Static und nicht Static in c# erklären? Ich habe es auch schon gegooglet, aber ich habe es immer nich muht verstanden!

MfG storestore


Th69 - So 18.09.11 12:06

Der MSDN-Eintrag static (C#) [http://msdn.microsoft.com/de-de/library/98f28cdx.aspx] erklärt es doch ganz gut.
Statische Member existieren eben nur einmalig pro Klasse (Typ) und nicht für jede Instanz davon.


storestore - So 18.09.11 14:32

Th69 hat folgendes geschrieben:
Statische Member existieren eben nur einmalig pro Klasse (Typ) und nicht für jede Instanz davon.

Achso, also wenn ich jetzt eine Instanz erstelle, kann ich nicht auf statische Member zugreifen, stimmt das?

mfg storestore

Moderiert von user profile iconTh69: quote korrigiert


huuuuuh - So 18.09.11 14:37

Doch doch, mit einer Instanz kannst du auf statische Member zugreifen. Der statische Member ist nur überall der gleiche. Statische Member können nicht auf Instanzmember zugreifen.


ujr - So 18.09.11 14:38

user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich jetzt eine Instanz etstelle, kann ich nicht auf statische Member zugreifen, stimmt das?


Nein. Du greifst aber in jeder Instanz auf die selbe statische Variable zu (weil sie eben zum Typ gehört und der für jede Instanz gleich ist).

Edit: huuuuuh war schneller - unabhängig von diesen Antworten solltest Du Dir aber wirklich die Dokumentation anschauen!


storestore - So 18.09.11 14:43

Achso, das heißt wenn ich etwas in einer Methode eine static member reinschreibe und die Methode aufrufe greift er nicht auf dieses Member zu, stimmt das?


ujr - So 18.09.11 14:47

user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich etwas in einer Methode eine static member reinschreibe und die Methode aufrufe greift er nicht auf dieses Member zu, stimmt das?


Ich würde mal sagen, Nein. Verstehe aber nicht so richtig wie Du das meinst. Warum probierst Du es nicht einfach aus? Wenn Du eine konkrete Nachfrage zu einem Code-Schnippsel hast, kann man es daran besser beschreiben.


storestore - So 18.09.11 14:55

Ich meine auf eine Statisches objekt kann ich ohne den Klassen namen nicht zugreifen
z.B.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
<span style="color: red">testtest(); // Geht nicht</span>
        }
        static class test
        {
            public static void testtest()
            {
                Console.WriteLine("ada");
                Console.ReadLine();
            }
        }
    }
}


Horschdware - So 18.09.11 15:03

Stell dir eine Klasse "Kreis" vor.
Diese hat ein statisches Attribut "Farbe" und ein nicht-statisches "Größe".
Du erstellst nun vier Objekte von dieser Klasse.

Setzt du nun für Objekt 1 die Größe, dann verändert sich jeweils nur die Größe vom ersten Kreis.
Setzt du das Attribut Farbe, dann ändert sich die Farbe für alle Kreise.

Ich hoffe, das ist so ein wenig "plastischer" ;-)

Dein Beispiel funktioniert so übrigens nicht:
Du versuchst in der statischen Main Methode deiner Klasse "Program" eine statische Klasse "test" zu definieren.

Klassendefinitionen erfolgen nicht im Methoden.

Es wäre hier vielleicht ratsam mal ein Tutorial oder Buch [http://www.amazon.de/C-2008-Dummies-Computers/dp/0470191090/ref=sr_1_2?ie=UTF8&qid=1316350790&sr=8-2] zu lesen ;-)


tüdeldü...

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
static class test
        {
            public static void testtest()
            {
                Console.WriteLine("ada");
                Console.ReadLine();
            }
        }

 class Program
    {
        static void Main(string[] args)
        {
          test.testtest();
        }
        
    }


ujr - So 18.09.11 15:03

user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
Ich meine auf eine Statisches objekt kann ich ohne den Klassen namen nicht zugreifen


Ja, das ist richtig. War das eine Feststellung oder Frage? Falls letzteres, hast Du die ja eigentlich selbst beantwortet.


storestore - So 18.09.11 15:48

Zitat:
Ich hoffe, das ist so ein wenig "plastischer" ;-)
Joub, danke jetzt habe ichs kappiert!


Zitat:
Es wäre hier vielleicht ratsam mal ein Tutorial oder Buch [http://www.amazon.de/C-2008-Dummies-Computers/dp/0470191090/ref=sr_1_2?ie=UTF8&qid=1316350790&sr=8-2] zu lesen ;-)

Wisso umbedingt Visual c# 2008 für Dummis

Zitat:
tüdeldü..

Ich hoffe du meinst nicht das tüdeldü von "Hangover" der Film
MFG storestore


Horschdware - So 18.09.11 22:00

user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:


Wisso umbedingt Visual c# 2008 für Dummis

Einfach nur ein beliebiges Beispiel. Nur weil "für Dummies" oder "für Kids" dran steht, heisst das nicht dass die Bücher schlecht sind oder für Minderbemittelte gedacht sind. Stör dich einfach nicht an der Bezeichnung.

Zitat:

Ich hoffe du meinst nicht das tüdeldü von "Hangover" der Film

Kenne ich nicht. Tut mir leid