Genel Türleri Kullanma (C++/CLI)

Bir .NET (veya UWP) dilinde yazılan genel değerler diğer dillerde kullanılabilir. Şablonlardan farklı olarak, derlenmiş derlemedeki genel bir derleme yine de genel kalır. Bu nedenle, genel türün örneğini farklı bir derlemede ve hatta genel türün tanımlandığı derlemeden farklı bir dilde başlatılabilir.

Örnek: C'de tanımlanan genel sınıf#

Bu örnekte C# dilinde tanımlanan genel bir sınıf gösterilmektedir.

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

Örnek: C dilinde yazılmış derlemeyi kullanma#

Bu örnek, C# dilinde yazılan derlemeyi tüketir.

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

Örnek şu çıkışı oluşturur:

90
80
70
60
40
30
20
10

Ayrıca bkz.

Genel Türler