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 temas de esta sección muestran cómo crear ensamblados en Visual C++ que consumen o proporcionan funcionalidad a los ensamblados escritos en C# o Visual Basic.
Consumir un indizador de C#
Visual C++ no contiene indizadores; tiene propiedades indizadas. Para consumir un indizador de C#, acceda al indizador como si fuera una propiedad indizada.
Para más información sobre los indizadores, consulte:
Ejemplo
El siguiente programa de C# define un indizador.
// consume_cs_indexers.cs
// compile with: /target:library
using System;
public class IndexerClass {
private int [] myArray = new int[100];
public int this [int index] { // Indexer declaration
get {
// Check the index limits.
if (index < 0 || index >= 100)
return 0;
else
return myArray[index];
}
set {
if (!(index < 0 || index >= 100))
myArray[index] = value;
}
}
}
/*
// code to consume the indexer
public class MainClass {
public static void Main() {
IndexerClass b = new IndexerClass();
// Call indexer to initialize elements 3 and 5
b[3] = 256;
b[5] = 1024;
for (int i = 0 ; i <= 10 ; i++)
Console.WriteLine("Element #{0} = {1}", i, b[i]);
}
}
*/
Este programa de C++/CLI consume el indizador.
// consume_cs_indexers_2.cpp
// compile with: /clr
#using "consume_cs_indexers.dll"
using namespace System;
int main() {
IndexerClass ^ ic = gcnew IndexerClass;
ic->default[0] = 21;
for (int i = 0 ; i <= 10 ; i++)
Console::WriteLine("Element #{0} = {1}", i, ic->default[i]);
}
El ejemplo produce la siguiente salida:
Element #0 = 21
Element #1 = 0
Element #2 = 0
Element #3 = 0
Element #4 = 0
Element #5 = 0
Element #6 = 0
Element #7 = 0
Element #8 = 0
Element #9 = 0
Element #10 = 0
Implementar las palabras claves is y as de C#
En este tema se muestra cómo implementar la funcionalidad de las palabras clave is y as de C# en Visual C++.
Ejemplo
// CS_is_as.cpp
// compile with: /clr
using namespace System;
interface class I {
public:
void F();
};
ref struct C : public I {
virtual void F( void ) { }
};
template < class T, class U >
Boolean isinst(U u) {
return dynamic_cast< T >(u) != nullptr;
}
int main() {
C ^ c = gcnew C();
I ^ i = safe_cast< I ^ >(c); // is (maps to castclass in IL)
I ^ ii = dynamic_cast< I ^ >(c); // as (maps to isinst in IL)
// simulate 'as':
Object ^ o = "f";
if ( isinst< String ^ >(o) )
Console::WriteLine("o is a string");
}
o is a string
Implementar la palabra clave lock de C#
En este tema se muestra cómo implementar la palabra clave lock de C# en Visual C++.
También puede usar la clase lock en la biblioteca de compatibilidad de C++. Consulte Sincronización (Clase lock) para obtener más información.
Ejemplo
// CS_lock_in_CPP.cpp
// compile with: /clr
using namespace System::Threading;
ref class Lock {
Object^ m_pObject;
public:
Lock( Object ^ pObject ) : m_pObject( pObject ) {
Monitor::Enter( m_pObject );
}
~Lock() {
Monitor::Exit( m_pObject );
}
};
ref struct LockHelper {
void DoSomething();
};
void LockHelper::DoSomething() {
// Note: Reference type with stack allocation semantics to provide
// deterministic finalization
Lock lock( this );
// LockHelper instance is locked
}
int main()
{
LockHelper lockHelper;
lockHelper.DoSomething();
return 0;
}