3 Stimmen

Typ Funktion<Typ>()

Ich habe so etwas heute in einigen Grafik-Libs gesehen, und es scheint sehr nützlich zu sein.

In der Demo, die ich gesehen habe, sah es so aus:

Texture2D texture = Content.Load<Texture2D>("Textures//Road");
Effect shader = Content.Load<Effect>("Effects//Road");

Ich nehme an, dass es sich um eine Funktion handelt, die den in den <>-Klammern definierten Typ zurückgibt und für verschiedene Typen eine andere Aktion ausführt.

Ich möchte selbst etwas Ähnliches einführen, wie wird es verwendet?

9voto

decyclone Punkte 29526

Es heißt Generika .

Ejemplo:

public T ConvertValue<T>(Object value)
{
    return (T)Convert.ChangeType(value, typeof(T));
}

Referenzen:

Generics (C# Programmierhandbuch)

4voto

En Load Methode kann verwendet werden, um viele verschiedene Arten von Inhalten zu laden, einschließlich solcher wie Bilder und Sounds. Daher kann sie Instanzen verschiedener Typen zurückgeben (z. B. Ihre Texture2d y Effect ).

Es gibt zwei Möglichkeiten, eine Methode zu erstellen, die dies leisten kann. Erstens, und am einfachsten, können Sie eine Object die die Basisklasse für jeden Typ in der .NET- und XNA-Welt ist.

public object Load(string path) { /*...*/}

müssten Sie es so verwenden:

Texture2D texture = (Texture2D)Content.Load("Textures//Road");

Die zweite Möglichkeit ist die Verwendung von Generika. Mit Generika können Sie das Casting für den Benutzer übernehmen und so seinen Code vereinfachen. Eine generische Version dieser Methode wäre:

public T Load<T>(string path)
{
    return (T)Load(path);
}

Sie sind immer noch mit der alten Last, aber Sie führen die Besetzung (was auch immer Typ, dass T ist) vor der Rückgabe des Wertes.

Generics sind nützlich, da man mit ihnen typsicheren Code erstellen kann, ohne viele typspezifische Methodenversionen zu erstellen, wie

public Texture2d LoadTexture2d(string path)
{
    return (Texture2d)Load(path);
}    
public Effect LoadEffect(string path)
{
    return (Effect)Load(path);
}
//500 more versions omitted for brevity

2voto

Shekhar_Pro Punkte 17558

Es heißt Generics und ist eine großartige Möglichkeit, Methoden und Klassen für die typunabhängige Programmierung zu spezifizieren. Mit Generics können Sie typsichere Datenstrukturen definieren, ohne sich auf einen bestimmten Datentyp festzulegen. Dies führt zu einer erheblichen Leistungssteigerung und höherer Codequalität, da Sie Datenverarbeitungsalgorithmen wiederverwenden können, ohne typspezifischen Code zu duplizieren.

Ein einfaches Beispiel für einen Stapel:

public class Stack<T>
{
   T[] m_Items; 
   public void Push(T item)
   {...}
   public T Pop()
   {...}
}
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
int number = stack.Pop();

Die obige Klasse funktioniert für jeden Typ wie String oder das Objekt Ihrer benutzerdefinierten Klasse Hier finden Sie eine vollständige Beschreibung

http://msdn.microsoft.com/en-us/library/ms379564%28v=vs.80%29.aspx#csharp_generics_topica

y

http://msdn.microsoft.com/en-us/library/512aeb7t%28VS.80%29.aspx

0voto

Marnix Punkte 6128

Die Load-Methode definiert in der Tat, was sie zurückgeben soll, und das ist also bereits für Sie definiert. Innerhalb der Load-Methode entscheidet der contentLoader, wie er geladen werden soll. Es gibt auch einige XNA-Beispiele für das Laden Ihrer eigenen Art von Daten. Wenn Sie etwas wie eine: .world -Datei. Sie können Ihren eigenen AssetLoader erstellen, der angibt, wie Ihre eigene Art von Daten zu laden ist.

  1. http://create.msdn.com/en-US/education/catalog/sample/custom_model_importer
  2. http://msdn.microsoft.com/library/bb447743.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X