Oharra
Orrialde honetara sartzeak baimena behar du. Saioa hasteko edo direktorioak aldatzen saia zaitezke.
Orrialde honetara sartzeak baimena behar du. Direktorioak aldatzen saia zaitezke.
Los genéricos creados en un lenguaje .NET (o UWP) se pueden usar en otros lenguajes. A diferencia de las plantillas, un genérico en un ensamblado compilado sigue siendo genérico. Por tanto, se puede crear una instancia del tipo genérico en un ensamblado diferente e incluso en un lenguaje distinto del del ensamblado en el que se definió el tipo genérico.
Ejemplo: Clase genérica definida en C#
En este ejemplo se muestra una clase genérica definida en C#.
// 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);
}
}
Ejemplo: Consumo de ensamblado creado en C#
Este ejemplo consume el ensamblado creado en C#.
// 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();
}
El ejemplo produce la siguiente salida:
90
80
70
60
40
30
20
10