-
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.
|
C# 3.0: Anonyme Typen
28.09.07 - .NET, Grundlagen, Base Framework, Allerlei Beitrag von Norbert Eder| | Nachdem ich bereits über Anonymen Delegates (auch unter .NET 2.0 verfügbar) als auch dem unter C# 3.0 neuen Keyword var geschrieben habe, möchte ich ein wenig über Anonyme Typen schreiben.
Anonyme Typen sind ähnlich zu anonymen Methoden (dazu kommen wir dann auch in einem der nächsten Blogbeiträge).Dies bedeutet, dass anonyme Typen inline gebildet werden können. Um dies zu verdeutlichen gleich ein kleines Beispiel:
Wie zu sehen ist, ist hierfür das Schlüsselwort var zu verwenden. Die Definition erfolgt inline und definiert welche Eigenschaften der neue Typ hat. Selbst IntelliSense kennt die neuen Eigenschaften.
Anonyme Typen kennzeichnen sich dadurch aus, dass sie keinen zugewiesenen Namen besitzen (dies ist auch in der Typen-Beschreibung - siehe IntelliSense - ersichtlich).
Werden im gleichen Scope zwei anonyme Typen definiert, welche die gleiche Signatur besitzen, kann der erste Type den zweiten einfach übernehmen, wie nachfolgend zu sehen:
Wozu werden anonyme Typen nun gebraucht?
Zum einen wurden anonyme Typen natürlich für LINQ eingeführt. Diese werden dort häufig verwendet und bilden daher eine Notwendigkeit. Aber auch für andere Zwecke können sie verwendet werden.
Grundsätzlich bieten sich anonyme Type dann an, wenn ein Typ kurzfristig (für die Ausgabe etc.) benötigt wird, aber nicht für die gesamte Anwendung zur Verfügung stehen muss. In diesem Fall muss also keine eigene Klasse erstellt werden, welche schlussendlich nur an einer einzigen Stelle verwendet werden würde. Wann anonyme Typen einzusenden sind bleibt jedem Entwickler selbst überlassen. Unter dem obigen Gesichtspunkt sollte aber durchaus klar sein, wann eine Verwendung sinnvoll ist und wann weniger.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Windows Vista und Ultimate-Extras
27.09.07 - Kunterbunt Beitrag von Norbert Eder| | Nachdem mit einem neuen Ultimate-Extra wieder etwas Bewegung in diese Geschichte kam, muss ich doch glatt eine Anmerkung dazu machen. Keine Ahnung wie ihr das seht, aber dieses tolle neue Windows DreamScene sieht zwar ganz nett aus, würde ich jedoch jetzt nicht unbedingt als ein Wahnsinns-Extra bezeichnen. Im Alltag ohnehin nicht zu gebrauchen, da es einfach zu viele Ressourcen zieht.
Stattdessen wären wirklich sinnvolle Erweiterungen als Ultimate-Extras sinnvoll. Eventuell werfen sie ja noch einen neuen Screensaver nach, damit die Extras tatsächlich an Wert gewinnen *sarcasm mode off*.
Man wird ja sehen wann die angekündigten 19 weiteren MUI-Sprachpakete kommen und was dem Ultimate-Extras-Team zukünftig noch einfällt. Ich hoffe mal sinnvolle Erweiterungen ...
Informationen rund um Extras, Windows Vista Ultimate usw. sind unter http://windowsultimate.com/ zu finden.
| | | 3 Kommentare
- 425 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
NAnt: Solution aus Visual SourceSafe aktualisieren
27.09.07 - Entwicklung, Software Testing, Qualitätsmgmt., .NET, Allerlei Beitrag von Norbert Eder| | Zu NAnt gibt es ja das Zusatzpaket NAntContrib welches den Task vssget zur Verfügung stellt. Dadurch kann die letzte Version aus dem SourceSafe geladen werden.
Blöderweise funktioniert dies nur bei Visual SourceSafe 6.0d, jedoch nicht mehr mit SourceSafe 2005. Der Grund hierfür liegt darin, dass nicht doe Commandline-Funktionalität verwendet wird, sondern die Visual Studio Integrations-Schnittstelle.
Grundsätzlich wäre das nicht weiter schlimm, würde eine Side-by-Side-Installation der Versionen 6.0d und 2005 möglich sein. Ist es aber nicht. Die zuletzt installierte Version setzt den verwendeten Provider. Ergo auch keine wirkliche Lösung.
Abhilfe schafft hier:
1. NAntContrib selbst anpassen und die notwendigen Änderungen durchführen (denn das Projekt scheint auch nicht mehr wirklich aktiv zu sein)
2. Visual SourceSave 6.0d installieren und nicht 2005 verwenden
3. Einen alternativen Weg finden, beispielsweise diesen Vorgang über einen MSBuild-Task abzubilden, wobei hier dann insgesamt zwei Build-Werkzeuge ins Spiel kommen - auch nicht optimal.
Wird der komplette Prozess auf einem eigenen Server ausgeführt kann dieser ja entsprechend konfiguriert werden. Darin liegt nicht das Problem. Vielmehr ist es nervig, wenn auf der lokalen Maschine Tests durchgeführt werden müssen (Debugging etc.). Klar kann hier eine VM verwendet werden, ist aber vielleicht auch wie mit Bomben auf Tauben schießen.
Hat hier jemand vielleicht einen entsprechenden Tipp parat um NAntContrib auch mit SourceSafe 2005 zum Laufen zu bewegen, speziell den vssget-Task?
Zusätzlich gehe ich einmal davon aus, dass NAntContrib in Verbindung mit dem Team System wohl auch eher ein Problem sein wird.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
MSDN: Schneller finden, was Sie brauchen
26.09.07 - .NET, Visual Studio, Internet, Community Beitrag von Norbert Eder| | Unter dem Motto Schneller finden, was Sie brauchen wurde das deutsche MSDN Portal optimiert:
Klar strukturiert, funktional und skalierbar: Wir haben das MSDN Portal optimiert, damit Sie gewünschte Informationen noch schneller finden. Darüber hinaus profitieren Sie jetzt von einer Reihe neuer Services, mit denen Sie jetzt noch leichter mit uns in Kontakt treten und das MSDN-Knowhow nutzen. Freuen Sie sich auf einen schnellen, persönlichen Support, der Ihnen eine Menge Zeit spart.
Das Schöne dabei ist, dass Informationen so nicht nur schneller gefunden werden können, sondern, dass auch die Möglichkeit auf einen Gewinn besteht: Über 5 Monate hinweg werden jeden Monat 60x Visual Studio 2005 Standard Edition verlost. Also gleich mal mitmachen.
Entwickler / Welt - Schneller finden, was Sie brauchen
| | | 4 Kommentare
- 521 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Anonymous Delegates
25.09.07 - .NET, Grundlagen, Base Framework Beitrag von Norbert Eder| | Dem einen oder anderen mögen anonyme Methoden (oder beispielsweise anonyme Typen wie sie mit C# 3.0 kommen) bekannt sein. In diesem Beitrag möchte ich ein wenig über anonyme Delegates schreiben und wozu diese benötigt werden (sind ohnehin sehr ähnlich zu anonymen Methoden).
Zuerst gleich das Beispiel, anhand dessen die Erklärungen vorgenommen werden:
using System;
using System.Collections.Generic;
using System.Text;
namespace AnonymousDelegatesSample
{
public class Book
{
public string Title;
public decimal Price;
}
public class Person
{
public string Firstname;
public string Lastname;
public List<Book> BookList;
public decimal Discount;
public DiscountCalculator CalculationMethod;
}
public delegate decimal DiscountCalculator(decimal price);
public class Example
{
private decimal CalculateDiscount(decimal price)
{
return price * new decimal(0.05);
}
public void ShowExample()
{
DiscountCalculator default_calc =
new DiscountCalculator(CalculateDiscount);
DiscountCalculator specialcustomer_calc =
delegate(decimal price)
{
return price * new decimal(0.09);
};
Book book1 = new Book();
book1.Title = "ASP.NET for dummies";
book1.Price = new decimal(35.99);
Book Book2 = new Book();
Book2.Title = "C# for dummies";
Book2.Price = new decimal(49.99);
List<Book> bookList = new List<Book>();
bookList.Add(book1);
bookList.Add(Book2);
List<Person> personList = new List<Person>();
Person person1 = new Person();
person1.Firstname = "Norbert";
person1.Lastname = "Eder";
person1.BookList = bookList;
person1.CalculationMethod = specialcustomer_calc;
personList.Add(person1);
Person person2 = new Person();
person2.Firstname = "Alf";
person2.Lastname = "Dudldei";
person2.BookList = bookList;
person2.CalculationMethod = default_calc;
personList.Add(person2);
foreach (Person p in personList)
{
decimal price = 0;
foreach (Book b in p.BookList)
price += b.Price;
p.Discount = p.CalculationMethod(price);
Console.WriteLine(
String.Format("{0} {1}:t {2} discount",
p.Firstname,
p.Lastname,
p.Discount.ToString()));
}
Console.WriteLine("Press any key ...");
Console.ReadKey();
}
}
}
Zuerst ein kurze Erklärung wozu dieses Beispiel dient: Grundsätzlich gibt es zwei Klassen. Zum einen die Person und zum anderen das Book. Wir gehen also davon aus, dass eine Person Bücher kauft und diese in einer Collection aufbewahrt werden. Nun soll (je nach Kundenstatus) ein Rabatt berechnet werden.
Zur Erklärung: Dies kann natürlich auch auf eine andere - vermutlich einfachere Art und Weise implementiert werden. Dieses Beispiel dient lediglich der Veranschaulichung von anonymen Delegates.
Grundsätzlich ist in diesem Beispiel ein üblicher Delegate definiert:
public delegate decimal DiscountCalculator(decimal price);
Dieser wird im Standardfall auch verwendet, um eine Methode aufzurufen, die für die Rabattberechnung zuständig ist.
DiscountCalculator default_calc =
new DiscountCalculator(CalculateDiscount);
Die aufgerufene Methode sieht dann so aus:
DiscountCalculator default_calc =
new DiscountCalculatprivate decimal CalculateDiscount(decimal price)
{
return price * new decimal(0.05);
}or(CalculateDiscount);
Nun kann es jedoch vorkommen, dass eine spezielle Berechnung durchgeführt werden muss, diese wird nur in einem ganz bestimmten Fall angewandt und bedarf daher keiner eigenen Methoden-Implementierung (in diesem Beispiel vielleicht weniger sinnvoll, aber generell treten bei der Verwendung von Delegates immer wieder Fälle auf, in denen sich eine eigene Methode nicht rentiert). Hier kommen nun anonyme Delegates ins Spiel. Die aufgerufene Methode ist hierbei ansich nicht vorhanden (daher anonym) und wird erst bei der Erstellung des Delegate definiert. Wie hier:
DiscountCalculator specialcustomer_calc =
delegate(decimal price)
{
return price * new decimal(0.09);
};
Damit wird im Grunde erreicht, dass die eigentliche Berechnung durch eine neue ersetzt wird. Eine entsprechende Methode muss hierzu nicht vorhanden sein.
Einsatzgebiete hierfür finden sich immer wieder, daher grundsätzlich nicht schlecht, wenn man sie kennt und auch anwenden kann. Im Falle des Falles muss der Entwickler ohnehin selbst entscheiden ob dies sinnvoll ist oder nicht. Wird die Berechnung anderweitig verwendet ist es sicherlich sinnvoll, diese in eine eigene Methode zu kapseln. Andernfalls kann durchaus ein anonymer Delegate verwendet werden.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Volltext-Suche und SQL Server 2005 Express
24.09.07 - SQL Server Beitrag von Norbert Eder
Abwechslung zum Wochenende
22.09.07 - Internet, Kunterbunt Beitrag von Norbert Eder
Basta! 2007: Fazit
21.09.07 - Offline, Konferenzen, Basta! 2007 Beitrag von Norbert Eder| | Abgesehen von den Workshops etc. ist die Basta nun eigentlich gelaufen. Zumindest die Haupt-Vortragstage sind vorüber. Und hier nun mein Fazit dieser Veranstaltung:
Organisation
Die Organisation ist gut gelungen. Beim "Check-In" ging alles sehr flott von statten, es wurde darauf gepocht, dass die Vorträge nicht weit überzogen werden, dass sie pünktlich beginnen. Das Essen stand pünktlich auf dem Tisch, auch die sonstige Verpflegung (Getränke etc.) war sehr gut. Auch Rahmenprogramme wurden entsprechend angeboten, wie auch zwei XBOX-Geräte, Massagen usw. Sehr feine Sache.
Vorträge
Eine sehr gute Auswahl, jede Menge Tracks. Für meinen Geschmack hätte man in manchen Vorträgen jedoch wesentlich weiter in die Tiefe gehen können. Das ist aber schwierig, da über den Wissensstand der Teilnehmer kaum etwas bekannt sein dürfte. Dennoch fanden sich wirklich einige Perlen unter den Vorträgen. Natürlich gab es auch jede Menge Information zu den aktuellen Technologien und auch ein paar Ausblicke in die Zukunft.
Im Großen und Ganzen hat mir die Basta! sehr gut gefallen, wenn auch sie sehr anstrengend war. Es hat mich sehr gefreut den einen oder anderen kennen zu lernen und hoffe, das geht so weiter :)
In diesem Sinne kann ich jedem, der sich über künftige Technologien informieren möchte die Basta! empfehlen, aber auch die kleineren, familiären Veranstaltungen haben durchaus ihren Reiz.
Zum Schluss noch ein herzliches Dankeschön an Kai für die interessanten Gespräche und unser kleines .NET Casts-Treffen, als auch ein Dankeschön an Mathias Raacke (er weiß schon warum) und natürlich auch an alle anderen, die ich jetzt nicht aufgezählt habe.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Basta!: Neuerungen in C# 3.0
21.09.07 - Offline, Konferenzen, Basta! 2007 Beitrag von Norbert Eder| | Gestern hatte ich es aufgrund der Heimreise nicht mehr geschafft über den Vortrag von Oliver Sturm zu sprechen, den ich leider (wirklich sehr schade darum) früher verlassen musste:
Bluffers guide to C# 3.0
Kurz und bündig: Neuerungen im Detail mit Demos.
Anmerken muss ich hierzu, dass mir dieser Vortrag besonders gut gefallen hat. Souveränität, Ruhe, gute Wortwahl, perfekte Erklärungen haben diesen Vortrag absolut zu einen der besten der Basta! (zumindest für mich) gemacht. Ich kann also jedem nur empfehlen sich einmal einen Vortrag von Oliver Sturm anzusehen.
Daumen hoch!
| | | 1 Kommentar
- 508 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Basta! Live: Basta Innovation Award 2007
20.09.07 - Offline, Konferenzen, Basta! 2007 Beitrag von Norbert Eder Zurück Weiter
|
|
|
|
|
|
|