-
ACHTUNG - NEUES BLOG
Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
|
Schlüsselwort sealed
06.01.07 - .NET, Grundlagen Beitrag von Norbert Eder| | Von einer Klasse die mit dem sealed-Schlüsselwort gekennzeichnet ist, kann nicht vererbt werden (sealed = versiegelt). Dies bedeutet, dass Erweiterungen nicht gewünscht sind bzw. eine weiterer Abstraktion ohnehin sinnlos wäre. Aufrufe an versiegelte Klassenmember können durch Laufzeitoptimierungen beschleunigt werden.
Beispiel
public sealed class TestClass
{
private int _a = 0;
private int _b = 0;
public int A
{
get { return this._a; }
set { this._a = value; }
}
public int B
{
get { return this._b; }
set { this._b = value; }
}
}
Ergänzungen
Strukturen (structs) sind per Definiton sealed und können daher nicht vererbt werden.
Eine Verwendung von sealed gemeinsam mit abstract ist nicht erlaubt, da man bei einer abstrakten Klasse davon ausgehen kann, dass die konkrete Implementierung nicht existiert.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Bücherregal ausgemistet, Bücher zu vergeben
06.01.07 - Blog-Intern Beitrag von Norbert Eder| | In meiner Bücherecke findet sich eine Liste (alter) Computerbücher, die ich nicht unbedingt wegwerfen möchte. Ein Großteil wird von mir gegen Seblstabholung verschenkt. Über andere Beförderungsmöglichkeiten (sofern jemand Interesse an den Büchern hat) kann man natürlich gerne reden.
Hat jemand Interesse, dann einfach über meine Kontaktseite bei mir melden.
| | | 2 Kommentare
- 876 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Umstellung der Kategorien abgeschlossen
06.01.07 - Blog-Intern Beitrag von Norbert Eder
Änderungen der Kategorien
05.01.07 - Blog-Intern Beitrag von Norbert Eder| | Die Kategorie-Struktur wurde in den letzten Tagen den neuen Gegebenheiten angepasst. Einige kleinere Änderungen sehen noch aus, dies kann aber erst nach erfolgreicher Neuzuordnung sämtlicher Beiträge geschehen. Diese werden in den nächsten Tagen umgeschlichtet, stehen jedoch nach wie vor unter bekanntem Link zur Verfügung.
Zukünftig wird es keine Unterteilung mehr in Programmiersprachen geben, da ich persönlich hauptsächlich C# einsetze und daher die meisten Codebeispiele in eben dieser Sprache gehalten sind. Zudem macht eine Unterscheidung auch wenig Sinn, da die verwendeten Klassen dieselben sind.
Weiters sind einige Kategorien aus der Liste verschwunden, da diese entweder in andere Kategorien eingegliedert wurden, oder das Beitragsaufkommen zu gering war.
Ich hoffe, dass diese Umstellung zur Übersichtlichkeit beiträgt und nicht allzugroße Verwirrung stiftet.
Neu eingeführt wurde die Kategorie Blog-Intern in der Beitrage "in eigener Sache" zu finden sind.
| | | Kommentar hinzufügen
| 2 Trackbacks
| Permalink | Trackback-URL |
.NET Unregelmäßigkeiten beim Implementieren einer abstrakten Klasse
04.01.07 - .NET, Base Framework Beitrag von Norbert Eder| | Beim Ableiten von einer abstrakten Klasse können bekanntlich mittels STRG-SHIFT-F10 die zu implementierenden Methoden automatisch eingefügt werden. Dies sieht dann beispielsweise so aus:
public override void BeginTransaction()
{
throw new Exception("The method or operation is not implemented.");
}
Allerdings frage ich mich, warum keine NotImplementedException verwendet wird, welche bereits seit .NET 1.0 im Framework vorhanden ist.
| | | 4 Kommentare
- 745 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
.NET BlogBook veröffentlicht
04.01.07 - .NET, Allerlei Beitrag von Norbert Eder| |
Es ist vollbracht ;-) Wie im Beitrag Ziele 2007 klar definiert bereits erwähnt, plante ich eine kleine Überraschung. Nun ist es soweit: Heute wurde die 1. Ausgabe des .NET BlogBook veröffentlicht.
Was ist das .NET BlogBook
Das .NET BlogBook ist eine Sammlung von Blog-Beiträgen aus den Blogs von mir und Kai. Diese wurden überarbeitet und stehen ab sofort in einem PDF zur Verfügung. Es soll als offline Nachschlagewerk dienen und bietet Unterstützung in vielen Entwickler-Lebenslagen.
Es ist geplant die Sammlung einmal im Quartal zu veröffentlichen. Dadurch stehen ständig aktuelle Artikel zur Verfügung. Zusätzlich werden bereits vorhandene Artikel überarbeitet und verbessert.
Das .NET BlogBook - Projektseite und Download
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
ICloneable: Etwas unsauber, nicht?
03.01.07 - .NET, Base Framework Beitrag von Norbert Eder| | Das Interface ICloneable wird für gewöhnlich implementiert, wenn das entsprechende Objekt geklont werden soll. Nun ergibt sich aus meiner Sicht hier ein kleines Problem:
ICloneable stellt eine Methode Clone zur Verfügung. Diese wird für die Klon-Implementierung verwendet. Nun gibt es aber zwei Möglichkeiten zu klonen:
Deep Copy: Alle Objekte werden dupliziert.
Shallow Copy: Nur Objekte oberster Ebene werden vervielfältigt. Alle anderen Objekte stellen Verweise auf die tatsächlichen Objekte dar.
Das eigentliche Problem dieser Schnittstelle besteht nun in folgender MSDN-Aussage:
Clone can be implemented either as a deep copy or a shallow copy.
Dadurch ist nicht klar definiert, wie die Clone-Methode nun zu implementieren ist. Bei der Entwicklung eines Frameworks wirft dies das Problem auf, dass der Verwender dieses Frameworks (abgesehen von der möglicherweise recht dürftigen Dokumentation) nicht weiß, ob sein dubliziertes Objekt nun eine vollständige Kopie darstellt, oder eben nicht.
Aus meiner Sicht empfehle ich daher, ICloneable nicht zu verwenden und stattdessen eine eigene Implementierung vorzunehmen, die hier eindeutiger ist. Anbieten würde sich die Erstellung zweier Interfaces nach folgendem Muster:
public interface IShallowCloneable<T>
{
T ShallowClone();
}
Durch die Implementierung des Interfaces IShallowCloneable geht nun eindeutig hervor, dass dabei ein Shallow Copy durchzuführen ist.
public interface IDeepCloneable<T>
{
T DeepClone();
}
Ebenso verhält es sich beim Interface IDeepCloneable
Zu guter Letzt noch ein Hinweis auf Object.MemberwiseClone(): MemberwiseClone erstellt eine flache Kopie (Shallow Copy) des aktuellen Objektes und könnte für diesen Zweck benutzt werden. Auch hier ein kurzer Auszug aus der MSDN:
MemberwiseClone kann nicht überschrieben und nur über diese oder eine abgeleite Klasse aufgerufen werden. Verwenden Sie eine Klasse, die die ICloneable-Schnittstelle implementiert, wenn eine tiefe oder flache Kopie eines Objekts öffentlich für die Benutzer bereitgestellt werden muss.
Bei diesem Thema scheint man sich also selbst bei Microsoft nicht 100%ig einig zu sein. Daher also mein Rat für eigene Frameworks: Für den Zweck des Kopierens sollten eigene Interfaces bereitgestellt werden. Dadurch können jegliche Zweifel aus dem Weg geräumt werden. In Kombination mit einer eindeutigen Dokumentation sieht sich der Konsument des Frameworks dadurch mit keinerlei Fehl-Information konfrontiert.
| | | 4 Kommentare
- 883 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Microsoft Visio Weblog
02.01.07 - Internet Beitrag von Norbert Eder| | Wer so wie ich doch des Öfteren mit Microsoft Visio zu tun hat, dem können diverse Tipps und Tricks einfach nicht schaden. Durch Zufall bin ich heute auf ein sehr gutes Weblog zu diesem Thema gestoßen, welches ich nicht vorenthalten möchte:
Mai-lan's Visio Blog
Leider tut sich darauf seit einem Jahr sehr wenig, aber die vorhandenen Artikel sind sehr hilfreich.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Ziele 2007 klar definiert!
02.01.07 - Blog-Intern Beitrag von Norbert Eder| | Im Artikel 2006 geht, 2007 kommt, Veränderungen angedacht hatte ich bereits über mögliche Veränderungen rund um dieses Weblog berichtet. Über die Feiertage habe ich mir so einige Gedanken gemacht und möchte meinen Lesern diese hier mitteilen:
Folgende Neuerungen wird es 2007 hier geben:
Grundlagen, Grundlagen, Grundlagen
2007 wird ein Jahr der Grundlagen. Viele können bestimmte Techniken praktisch anwenden, es fehlt aber oft am notwendigen theoretischen Verständnis. Dieses möchte ich gemeinsam mit meinen Lesern durch die Aufbereitung von Grundlagen-Themen fördern.
Umstrukturierung Kategorien
Während einige Kategorien fast täglich von mir benutzt werden, andere jedoch kaum, werden in absehbarer Zeit Kategorien zusammengelegt bzw. neue Namen vergeben. Die Beiträge müssen - meiner Meinung nach - klarer getrennt werden um auch vom Leser leichter aufgefunden werden zu können. Die Umstellung wird wohl in den nächsten Tagen geschehen. Wer also Kategorie-Feeds meines Weblogs weiterverarbeitet, möge sich mit mir in Verbindung setzen.
Überarbeitung Tutorials, neue Artikel
Bei den Tutorials hat sich in den letzten Monaten wenig getan. Diese werden von mir in der nächsten Zeit überarbeitet und überarbeitet. Zudem werden neue Tutorials, als auch größere Grundlagen-Artikel ihren Platz bekommen.
Eine Überraschung darf nicht fehlen
Überraschungen sind immer gerne gesehen und daher wird es im Laufe des Jänners hier eine zu finden geben. Näheres möchte ich jetzt jedoch noch nicht verraten, ich werde mich jedoch noch entsprechend zu Wort melden.
Nun gut, dieses sind die grundlegenden Änderungen die dieses Weblog betreffen werden. Ich hoffe, dass mittlerweile alle gut im 2007er angekommen sind und wieder voller Elan am Entwickeln sind. Auf ein erfolgreiches und informationsreiches 2007.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Paper zur Common Language Infrastructure (CLI)
01.01.07 - .NET, Grundlagen Beitrag von Norbert Eder Zurück Weiter
|
|
|
|
|
|
|