Frage

Ich habe noch nie verwendet eine der .NET-Generika in meiner Arbeit, aber ich verstehe, dass sie ziemlich beliebt sind. Hat jemand eine gute Links oder Buchvorschläge für sie zu lernen? Als Bonus; Ich habe nur vage verstehen, was .NET generische Sammlungen sind und was sie tun ... hat jemand irgendwelche praktische Beispiele, wie sie könnten zu einer größeren Vorteil als die normalen Sammlungen in .NET verwendet werden?

Andere Tipps

Die offensichtliche Wahl ..

MSDN C # Generics

CLR via C # von Jeffrey Richter geht in die Tiefe über Generika, und ist einer der unschätzbaren Ressourcen jeder .NET-Entwickler besitzen und lesen sollte.

Wenn Sie jemals C ++ Vorlagen verwendet haben, dann sind .Net Generika fast das gleiche. Sie verwenden auch eine ähnliche Syntax.

Auch wenn Sie nicht wissen, jeden C ++ Sie wahrscheinlich diese härter machen, als Sie brauchen, vor allem im Hinblick auf die Sammlungen. Sie sind genau wie jede andere Sammlung, aber wenn Sie sie erstellen liefern Sie einen Typnamen innerhalb der <<> 's so dass der Compiler weiß, welche Art von Punkt sie halten.

C # 3.0 in a Nutshell ist ein fantastisches Nachschlagewerk mit Beispielen gerade groß genug, das Konzept zu erfassen, ohne Völlegefühl.

Ich fand sehr WROX Professional .NET 2.0 Generics nützlich, da es viele reale Welt Beispiele enthält. Generics könnte für den Anfänger verwirrend sein, aber sie konnten ein sehr nützliches / mächtig / Zeitersparnis Werkzeug in den Händen eines erfahrenen Entwicklers. Ich persönlich finde .NET Generics nützlichsten in die Definition und Verwendung von Sammlungen zu vereinfachen. Auch die Verwendung von Generika zu einem effizienteren Code führen könnte, da es die Leistung in der Regel mit Boxen / Unboxing Typkonvertierungen zugeordnet Hit minimieren könnte.

Es ist am besten einiges Microsoft Training zu diesem Thema zu folgen. Wenn Sie Bücher suchen, wäre folgende ideal sein:

http://www.microsoft.com/MSPress/books/9469.aspx

Meine Stimme ist-vor allem kann man sie nur vermeiden :)

Der Hauptvorteil für Generika ist Gießen zu sparen, wenn Sie intern am Ende tun Gießen, die keinen Sinn macht. Wenn Sie versuchen, in dieser Frage suchen würden Sie fanden heraus, dass vor allem die Kandidaten für Generika sind wirklich diese Sammlungen / Sätze, die intern nativen Speicher für solche Nutzen schaffen könnte. Die meisten anderen Komponenten, andererseits gewinnen wenig / keine Leistung, und verschlechtert sich die Flexibilität, um eine Schnittstelle Vererbung Implementierung signifikant zu vergleichen.

Wenn Casting ärgert Sie so viel, vielleicht Zeit für Sie dynamische Sprachen wie Ironpython zu berücksichtigen:)

Und-, wenn Sie wirklich kommen über ein Szenario, das Sie allgemeinen Sinn denken, post it out als ein andere Frage, die hier Gehirne zusammen aussehen könnte und löst es von Fall zu Fall:)

Update: Yep Compiler Überprüfung schön, aber Castle Project Quelle überprüfen, können Sie viele Situationen sehen, wo ein generischer Typ in die Quere kommt, weil Sie nicht Gieß- die Dinge wie IBusinessObject tun können, ist viel flexibler als BusinessObject- weil Sie nicht etwas erben von Businessobject zurück zu Businessobject werfen können und erwartet eine Funktion geerbt zuzugreifen. Normalerweise habe ich Code enden als BusinessObjectBase -> Businessobject -> Ihre eigentliche Klasse. Deshalb irgendwie fühle ich mich seiner nicht immer von Vorteil generics- zu verwenden und ich war einer von denen, die Missbrauch solche Umsetzung tat und am Ende jede Menge lustige Funktion mit generischen Typisierung hat, nicht schön überhaupt.

Update # 2: Boxen / Unboxing bedeutet nur die Anforderung, das Objekt zu werfen, wenn Sie eine abstrakte Art verwenden (wie Objekt) zum Speichern von Wert und einen starken typisierten Wert verwenden, um es zu speichern wieder (das Gießen erfordert), nicht viel Unterschied kann ich aus der Sammlung Situation sehen auseinander I angegeben. UND Code wie dieser immer noch tut Boxen:

public T GetValue<T>() {
  return (T) ...;
}

Das ist der generische Missbrauch ich am häufigsten gesehen haben. Die Leute denken, sie mit einheimischer Art haben es hier, sie sind in der Tat nicht. Stattdessen machen sie nur das Gießen in generische Syntax. Was wirklich Sinn macht, ist dies:

public class MyList<T>
{
  private List<T> _list;
...
public T GetValue(int index)
{
  return _list[index];
}

Dann das ist wieder zurück zu unserer Sammlung Lagerung. Das ist, warum ich nach der Sammlung Lagerung sagte ich nicht viel Chance Generika hilft sehen. Geworben von diesem Tutorial: http://en.csharp-online.net/Understanding_Generics-Revisiting_Boxing_and_Unboxing

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top