Partager via


Utilisation de génériques (C++/CLI)

Les génériques créés dans un langage.NET peuvent être utilisés dans d'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 type générique dans un assembly différent et même dans un langage différent de l'assembly dans lequel le type générique a été défini.

Remarques

Pour plus d'informations, consultez :

Exemple

d38y03h1.collapse_all(fr-fr,VS.110).gifDescription

Cet exemple présente une classe générique définie en c#.

d38y03h1.collapse_all(fr-fr,VS.110).gifCode

// 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

d38y03h1.collapse_all(fr-fr,VS.110).gifDescription

Cet exemple utilise l'assembly créé en c#.

d38y03h1.collapse_all(fr-fr,VS.110).gifCode

// 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();
}

d38y03h1.collapse_all(fr-fr,VS.110).gifSortie

90
80
70
60
40
30
20
10

Voir aussi

Autres ressources

Génériques (extensions du composant C++)