|
|
|
|
I wonder how
I wonder why
Yesterday you told me bout the blue blue sky
And all that I can see is just a yellow lemon-tree
I'm turning my head up and down
I'm turning turning turning turning turning around
And all that I can see is just another lemon-tree
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Y2Keeper am 01.05.2009 12:09]
|
|
|
|
|
|
Das war meine allererste Maxi-CD
|
|
|
|
|
|
|
|
|
|
|
| Zitat von [DK]Peacemaker
Es gab tatsächlich in letzter Zeit kaum Meldungen wie [...] "Studie-Belegt:-Linux-Schützt-Männer-Vor-Sexueller-Annäherung-Durch-Attraktive-Frauen".
| |
wäre auch falsch.
|
|
|
|
|
|
|
Immerhin hatte mir Linux gerade klar gemacht, dass es wohl tatsächlich die Festplatte in meinem alten Notebook ist, die Probleme macht.
Da diese selbst keine Fehler aufweißt (def. Sektoren oder ähnliches), möchte ich auch den Controller ausschliessen. Zu diesem Zweck, muss ich etwas fertig bringen, eine 3.5" IDE Festplatte an den Anschluss im Notebook (2.5" IDE) zu bekommen.
Meint ihr, dass kriegt man hin, wenn man eigentlich nur mit ein paar alten IDE-Kabels versorgt ist? Ich will nicht blind eine neue Festplatte kaufen, wenn es dann doch der Controller ist.
Unter einem frisch installierten Vista dauert es ewig eine 3MB Datei zu entpacken, andere Sachen hingegen funktionieren "normal schnell". Hab jetzt Xubuntu von einem USB-Stick gestartet und habe festgestellt, dass es sehr flüssig läuft. Gibt es da eine Möglichkeit einen Stress-Test zu machen?
Also, ich mach den Test unter Xubuntu auf dem USB-Stick. Dann installiere ich Xubuntu auf die Festplatte und mach ihn dann nochmal. Oder wäre das nicht Aussage-kräftig genug?
|
|
|
|
|
|
C# Frage
|
Ich muss aktuell für die Fh eine einfache Stromkreis Simulation schreiben. Dazu habe ich mir eine abstrakte Klasse Bauteil erstellt, von der alle meine Bauteile (bis Dato: Lampe, Relais, Stromquelle) erben.
Die Klasse Bauteil sieht so aus:
|
Code: |
public abstract class Bauteil {
public Bauteil() {}
public Bauteil(Bauteil parent) {
this.parent = parent;
}
private Bauteil parent = null;
public Bauteil Parent {
get {
return parent;
}
set {
parent = value;
}
}
public bool hatStrom() {
return parent != null && parent.hatStrom();
}
}
}
|
|
D.h. wann immer ich eine hatStrom() Methode (jaja, ich mische deutsche und englische Bezeichner...mach ich noch weg ) aufrufe wird bis nach oben traversiert.
Außerdem gibt es jetzt eine Klasse Stromquelle, die wie folggt ausschaut:
|
Code: |
public class Stromquelle : Bauteil {
public new bool hatStrom() {
return true;
}
}
|
|
Wenn ich jetzt zum testen eine verkettung Stromquelle -> Licht mache, dann gibt hatStrom() bei einer "Lampe" immer false zurück.
Im Debugger kann auch auch schön verfolgen, dass nach oben hindurchtraversiert wird. Aber: wenn die Ausführungsreihenfolge die hatStrom() Methode von Stromquelle aufruft, dann wird, nicht (wie ich erwartet hätte) die überschreibende Methode, die immer true liefert, aufgerufen, sondern statt dessen die Methode in der abstrakten Basisklasse. Die logischerweise false zurückgibt, da parent für die Stromquelle null ist.
Frage(n):
- Warum ist das so? Wieso wird nicht die überschreibende Methode aufgerufen?
- Was sucht das "new" da? VS meint das müsste da hin, wenn ich hatStrom() überschreiben will (will ich ja), daher hab ich es hinzugefügt. Allerdings ändert auch ein entfernen nichts am Verhalten.
Hab ich was übersehen oder ist das Vererbungskonzept von C# irgendwie komisch?
/: Vergesst es...ich denke ich hab den Denkfehler gefunden. Ich glaub Sonne macht das Hirn weich.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Achsel-des-Bösen am 01.05.2009 17:42]
|
|
|
|
|
|
Anders als in Java muss man "überschreibbare" Methoden als virtual deklarieren und dann statt mit "new" mit "override" kennzeichnen.
Damit dürfte dein Problem behoben sein; die "new"-Variante hat einige Nachteile (zum einen, weil es zum Beispiel nicht gewünscht sein kann, bestimmte Methoden zu überschreiben, zum anderen weil sie die ursprüngliche Implementierung verstecken).
Ansonsten ein paar Tipps: Ab dem C#-Compiler, der bei Visual Studio 2008 dabei ist, kann man die Properties wesentlich kürzer schreiben, in deinem Fall:
public Bauteil Parent { get; set; }
(Das funktioniert auch in .NET 2.0, allerdings nur wenn man den C# 3.0 Compilier nutzt, um 2.0 Binaries zu erstellen).
Also ganz knapp; einfach zu überschreibende Methoden mit "virtual" markieren und deren Überschreibung mit "override". "New" macht nämlich genau das, was du festgestellt hast.
|
|
|
|
|
|
|
Nochmal kurz, "new" ist dazu da, wenn du eine Methode hast, die nichts mit der Basis-Methode zu tun hat, aber trotzdem die selbe Signatur hat.
Wenn du als einen Zeiger auf eine Stromquelle hast, so zeigt hasStrom() auf die "neu" implementierte Variante. Castest du diese Instanz aber in ein "Bauteil" und rufst dann die hatStrom() Methode auf, so wird die ursprüngliche (praktisch nicht überschriebene) Methode aufgerufen.
Und natürlich das übliche; öffentliche Member werden in .NET natürlich groß geschrieben, aber da brauchen wir jetzt nicht drüber zu streiten
|
|
|
|
|
|
|
Ja...irgendwie war ich der kurzfristigen Überzeugung, dass alle Funktionen einer abstrakten Klasse auch abstrakt sind. Was ja keinen Sinn macht, vor allem wenn sie einen Methodenrumpf haben
Zu der get-set Kurzschreibweise: Wo is denn da der Vorteil, wenn ich das so mache? Im Prinzip kann ich dann doch auch einfach ein normales Feld nehmen und brauch gar keine Property.
Mir ist bewusst, dass das in meinem Fall auch zu trifft, aber so kann ich innerhalb der Klasse das Feld benutzen (ich weiß ja hoffentlich was ich tue) und kann nach aussen hin einen Acsessor anbieten, bei dem ich, wenn ich denn möchte, noch eine Fehlerbehandlung stricken könnte.
|
|
|
|
|
|
|
Das siehst du vollkommen richtig, in der { get; set; } Form, verhält sich die Eigenschaft wie eine öffentliche Variable. Was man aber machen kann, ist z.B. den set-Accessor private machen, etwa so:
public Bauteil Parent { get; private set; }
So kannst nur du die Eigenschaft verändern, (protected set, gibts natürlich auch). Es ist wirklich nur für triviale Dinge interessant, aber wenn man viele Eigenschaften hat, die praktisch wie öffentliche Variablen funktionieren, so hat man es irgendwann satt, den ganzen Quatsch zu tippen.
Wenn du natürlich Fehlerbehandlung in den Accessoren machen möchtest, kommst du tatsächlich nicht ohne ein privates Feld aus.
Wollte das nur für diesen speziellen Fall mal angemerkt haben, weil ich es ganz praktisch finde und Eigenschaften allgemein sehr zu schätzen weiß, weil man damit sich besser ausdrücken kann, als eine Reihe von get/set-Methoden anzubieten.
|
|
|
|
|
|
|
| Zitat von Achsel-des-Bösen
Ja...irgendwie war ich der kurzfristigen Überzeugung, dass alle Funktionen einer abstrakten Klasse auch abstrakt sind. Was ja keinen Sinn macht, vor allem wenn sie einen Methodenrumpf haben
Zu der get-set Kurzschreibweise: Wo is denn da der Vorteil, wenn ich das so mache? Im Prinzip kann ich dann doch auch einfach ein normales Feld nehmen und brauch gar keine Property.
Mir ist bewusst, dass das in meinem Fall auch zu trifft, aber so kann ich innerhalb der Klasse das Feld benutzen (ich weiß ja hoffentlich was ich tue) und kann nach aussen hin einen Acsessor anbieten, bei dem ich, wenn ich denn möchte, noch eine Fehlerbehandlung stricken könnte.
| |
Achso, mit "abstract" muss man natürlich diese Methoden markieren, die notwendig sind. Ich weiß gar nicht, ob er bei Methoden ohne Rumpf automatisch annimmt, dass diese abstrakt sind.
|
|
|
|
|
|
|
Irgendwie ist mein Viertel heute komisch:
War eben anner Tanke paar Pils besorgen. Direkt an der Tanke standen ungewöhnlich viele Asoziale und Betrunkene rum. Das liegt wahrscheinlich am Fussballspiel das vorhin war.
Direkt vor meinem Block (Naturwissenschaftlicher Campus) sind ungewöhnlich viele Ausländer. Muslime, Inder usw. Sehr viele ums genau zu nehmen.
Und drei von denen haben mich unterwegs von und zu der Tanke nach nem Feuerzeug gefragt. Da ist was im Busch! Das würde auch den Polizeihubschrauber erklären der den ganzen Tag vor meinem Fenster rumsurrt!!!
|
|
|
|
|
|
|
Linksextreme wollen die Polizei aufmischen und ausländische Jugendliche denken, ihnen würde alles gehören (vor allem der Block/ die Straße).
Was soll los sein? Ganz normaler Alltag in D ...
|
|
|
|
|
|
|
nene die ausländer waren ja alles Akademiker
|
|
|
|
|
|
|
Muslime sind also Auslaender? So, so.
|
|
|
|
|
|
|
Je suis aviné.
|
|
|
|
|
|
|
| Zitat von SirSiggi
Je suis aviné.
| |
ich schließ mich einfach mal an.
befoffen.
oder so... wahhhhha *animalische geräusche von sich geb* was ein abend *kleinen finger in mundwinkel steck*
|
|
|
|
|
|
|
|
|
|
|
| Zitat von Y2Keeper
Muslime sind also Auslaender? So, so.
| |
Du bist doch auch einer!
|
|
|
|
|
|
|
Hausaufgaben kontrollieren macht kein Spass (theo. inf).
17/90 erst fertig :/
Wenigstens lösen fast alle Studenten die beiden Beweise (Paare nat. Zahlen abzählbar, Potenzmenge der nat. Zahlen überabzählbar) über Cantors Diagonalargumente.
So sind die Beweise alle rehct ähnlich und ich muss sie nur überfliegen. Doof find ich nur die Leute die da einfach irgendwas von Wikipedia abschreiben ohne sich damit auseinanderzusetzen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Zitat von TriggerTG
| Zitat von Y2Keeper
Muslime sind also Auslaender? So, so.
| |
Du bist doch auch einer!
| |
Auslaender oder Muslim, oder beides?
|
|
|
|
|
|
|
|
|
|
|
Ruegen gehoert nur zu Deutschland weil Daenemark es nicht haben wollte!
|
|
|
|
|
|
|
Das ist eine Lüge!! Eine dreiste Lüge!!!
|
|
|
|
|
|
|
60 Hausaufgaben geschafft. 15 noch zu machen.
Aber ersma Feierabend. Prost.
|
|
|
|
|
|
|
Kennt einer von euch ne vernünftige Alternative zu David/Tobit für Linux? Unser Windows Server System suckt mittlerweile ziemlich hart
|
|
|
|
|
|
|
Ich behaupte mal ganz dreist, dass das nichts mit Windows zu tun hat.
|
|
|
|
|
|
|
|
|
|
Thema: Gehirnsalat ( wir unter uns ) |