2009-09-01 3 views
6

den folgenden Code Bitte beachten Sie:IEnumerable: Was bedeutet es, im Rahmen der OOP

public class Person 
(
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    Public int Age {get; set;} 
} 

IEnumerable <Person> people; 

auch in die ich gesehen habe etwas, das viele Programme wie <IQueryable> was bedeutet das?

Was bedeutet IEnumerable<Person> hier?

+3

IEnumerable ist ein .Net-Typ, nicht ein OOPs-Begriff – Gishu

+0

BTW, es ist OOP (objektorientierte Programmierung) nicht OOPS. Ich habe es bearbeitet, um es zu beheben. – Aamir

+0

@Aamir du hast Recht. Ich plädiere für semantische Verbreitung :) - Wenn Sie jedoch Alan Kay und einige andere angesehene Leute fragen, ist OOPS geeignet für das, was es geworden ist. – Gishu

Antwort

4

IEnumerable<T>

Es gibt viele verschiedene Möglichkeiten, dass eine Reihe von Dingen gespeichert werden kann, in einer Liste, in einem Array, in einer Datenbank usw. Eine Sache, dass diese Speichermechanismen gemeinsam haben, ist, dass der Satz von Dinge gehalten werden kann Enumerated, das ist jeder kann zugegriffen werden nacheinander mit einem Sprachkonstrukt wie foreach zum Beispiel.

Die IEnumerable<T> Schnittstelle stellt diese allgemeine Schnittstelle dar, die alle Halter von Sätzen Dinge Enumeration aktivieren müssen.Daher stellt IEnumberable<Person eine Schnittstelle dar, die das Aufzählen eines Satzes von Person-Objekten ermöglicht, ohne spezifisch für die tatsächliche Art und Weise zu sein, in der diese Objekte gespeichert werden.

IQueryable<T>

Dies ist eine Erweiterung zu IEnumerable<T> aber etwas Bestimmtes zu LINQ darstellt. In LINQ können Sie eine Abfrage angeben, die einen Satz (oder Mengen) von Elementen filtern und transformieren kann. Gegen eine reine IEnumerable<T> Schnittstelle wäre dies als LINQ to Objects bekannt, in der jede Stufe der Abfrage letztlich ein einfacher Aufruf einer Erweiterungsmethode ist.

Aber gegen ein Objekt, das IQueryable<T> implementiert Dinge können ausgefeilter sein. Das Objekt, das IQueryable<T> implementiert, kann mit einem anderen LINQ Provider verknüpft werden, der die Ausführung von LINQ-Abfragen auf andere Weise implementiert. Zum Beispiel kann IQueryable<Person> durch einen Typ implementiert werden, der dem LINQ-To-SQL-Provider zugeordnet ist. In diesem Fall wird eine LINQ-Abfrage in eine T-SQL-Abfrage umgewandelt, die für eine Datenbank ausgeführt wird, um eine Menge von Elementen zu erhalten (das Ergebnis muss nicht unbedingt eine Menge von Person Objekten sein).

+0

Eine der besten Antworten in einfachem Englisch – Edwards

3

IEnumerable bedeutet nichts im Zusammenhang mit OOP.

IEnumerable und IEnumerable<T> sind .NET-Schnittstellen, die einfach angeben, dass eine Sequenz aufgezählt werden kann. Klassen, die IEnumerable oder IEnumerable<T> implementieren, stellen Eigenschaften/Methoden zur Verfügung, um diese Aufzählung zu ermöglichen.

Zum Beispiel:

IEnumerable<Person> people = GetPeopleFromSomewhere(); 

// iterate through the sequence 
foreach (Person p in people) 
{ 
    Console.WriteLine(p.Name); 
} 

// use LINQ to query the sequence 
var peopleOver30 = people.Where(p => p.Age > 30); 
0

IQueryable erstreckt IEnumerable und soll von LINQ-Provider implementiert werden. Sie können Abfragen für jeden Provider ausführen - d. H. Diff-Provider über diese Schnittstelle abstrahieren. Es erweitert IEnumerable, sodass die Ergebnisse der Abfrage iteriert werden können. z.B. Schleife über alle Person-Objekte mit LastName.equals („Smith“)

IEnumerable<People> bedeutet, dass die Variable auf ein Objekt verweist, die es Ihnen erlaubt, iterieren/aufzählen/Schleife über eine Sammlung von Person-Objekten

foreach(Person person in people) 
    Console.WriteLine(person.ToString()); 

Es ist ein bisschen kompliziert zu erklären (Jon Skeet macht einen tollen Job in seinem Buch). Ein Typ, der IEnumerable implementiert, erklärt im Grunde, dass ich Ihnen ein Iteratorobjekt (über die GetEnumerator-Schnittstellenmethode) geben kann, das eine IEnumerator-Schnittstelle freigibt, mit der Sie auf das Current-Element in der Sammlung und MoveNext zugreifen können, um zum nächsten Element in der Liste zu gelangen. Das Foreach-Konstrukt ruft intern die obigen Operationen auf, um seinen Zweck zu erreichen.
Siehe the example in MSDN, Implementieren Sie einen Iterator selbst und es wird klarer.

0

IEnumerable<T> ist ein .NET-Framework-Typ. Es stellt nur eine aufzählbare Sequenz von Elementen ohne irgendwelche Methoden zum Manipulieren der Sequenz dar. Viele Typen implementieren diese Schnittstelle - zum Beispiel , IList<T> und BindingList<T> - und es wird häufig anstelle des konkreten Typs eines Felds oder einer Variablen verwendet, wenn die Sequenz als schreibgeschützt behandelt werden soll.