Verwenden von Generika (C++/CLI)

Das Generika, das in einer .NET-Sprache erstellt wird, wird in anderen .NET-Sprachen verwendet werden.Im Gegensatz zu Vorlagen wird ein generisches in einer kompilierten Assembly weiterhin generisch.Daher instanziiert werden von den generischen Typ in einer anderen Assembly und sogar in einer anderen Sprache als die Assembly, in der der generische Typ definiert wurde.

Hinweise

Weitere Informationen finden Sie unter:

Beispiel

d38y03h1.collapse_all(de-de,VS.110).gifBeschreibung

In diesem Beispiel wird eine generische Klasse an, die in C# definiert ist.

d38y03h1.collapse_all(de-de,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);
   }
}

Beispiel

d38y03h1.collapse_all(de-de,VS.110).gifBeschreibung

In diesem Beispiel wird die Assembly, die in C# erstellt wird.

d38y03h1.collapse_all(de-de,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(de-de,VS.110).gifOutput

90
80
70
60
40
30
20
10

Siehe auch

Weitere Ressourcen

Generika (Komponentenerweiterungen für C++)