Consommer des génériques d'autres langages.NET
Les génériques créés dans un langage.NET peuvent être utilisés dans les autres langages.NET. Contrairement aux modèles, un générique dans un assembly compilé reste toujours générique. Par conséquent, il peut instancier le générique dans un assembly distinct et même dans une langue autre que l'assembly dans lequel le type générique a été défini.
Remarques
Pour plus d'informations, consultez :
Exemple
Description
Cet exemple montre une classe générique définie en c.
Code
// consuming_generics_from_other_NET_languages.cs
// compile with: /target:library
// a C# program
public class CircularList<ItemType> {
class ListNode {
public ItemType m_item;
public ListNode next;
public ListNode(ItemType item) {
m_item = item;
}
}
ListNode first, last;
public CircularList() {}
public void Add(ItemType item) {
ListNode newnode = new ListNode(item);
if (first == null) {
first = last = newnode;
first.next = newnode;
last.next = first;
}
else {
newnode.next = first;
first = newnode;
last.next = first;
}
}
public void Remove(ItemType item) {
ListNode iter = first;
if (first.m_item.Equals( item )) {
first =
last.next = first.next;
}
for ( ; iter != last ; iter = iter.next )
if (iter.next.m_item.Equals( item )) {
if (iter.next == last)
last = iter;
iter.next = iter.next.next;
return;
}
}
public void PrintAll() {
ListNode iter = first;
do {
System.Console.WriteLine( iter.m_item );
iter = iter.next;
} while (iter != last);
}
}
Exemple
Description
Cet exemple consomme l'assembly créé en c.
Code
// consuming_generics_from_other_NET_languages_2.cpp
// compile with: /clr
#using <consuming_generics_from_other_NET_languages.dll>
using namespace System;
class NativeClass {};
ref class MgdClass {};
int main() {
CircularList<int>^ circ1 = gcnew CircularList<int>();
CircularList<MgdClass^>^ circ2 = gcnew CircularList<MgdClass^>();
for (int i = 0 ; i < 100 ; i += 10)
circ1->Add(i);
circ1->Remove(50);
circ1->PrintAll();
}
Sortie
90
80
70
60
40
30
20
10