Aracılığıyla paylaş


IsUdtReturn Sınıf

Tanım

Dönüş türünün kullanıcı tanımlı bir tür olduğunu gösterir. Bu sınıf devralınamaz.

public ref class IsUdtReturn abstract sealed
public static class IsUdtReturn
type IsUdtReturn = class
Public Class IsUdtReturn
Devralma
IsUdtReturn

Örnekler

Aşağıdaki kod örneği, ad alanında System.Reflection.Emit sınıfları kullanarak bir derleme oluşturur ve değiştiriciyi IsUdtReturn bu derlemeye yayar.


#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Runtime::CompilerServices;
using namespace System::Threading;


ref class CodeEmitter
{
private:
    AssemblyBuilder^ asmBuilder;
    String^ asmName;
    ModuleBuilder^ modBuilder;


    void prepareAssembly(String^ name){
        
        // Check the input.
        if(!name){
        
            throw gcnew ArgumentNullException("AssemblyName");
        }

        asmName = name;

        // Create an AssemblyName object and set the name.
        AssemblyName^ asmName = gcnew AssemblyName();

        asmName->Name = name;

        // Use the AppDomain class to create an AssemblyBuilder instance.

        AppDomain^ currentDomain = Thread::GetDomain();

        asmBuilder = currentDomain->DefineDynamicAssembly(asmName,AssemblyBuilderAccess::RunAndSave);

        // Create a dynamic module.
        modBuilder = asmBuilder->DefineDynamicModule(name);
    }


public:

    // Constructor.
    CodeEmitter(String ^ AssemblyName){

        prepareAssembly(AssemblyName);
    }

    // Create a new type.
    TypeBuilder^ CreateType(String^ name){
       
        // Check the input.
        if(!name){
        
            throw gcnew ArgumentNullException("AssemblyName");
        }

        return modBuilder->DefineType( name );
    }

    // Write the assembly.
    void WriteAssembly(MethodBuilder^ entryPoint){
    
        // Check the input.
        if(!entryPoint){
        
            throw gcnew ArgumentNullException("entryPoint");
        }

        asmBuilder->SetEntryPoint( entryPoint );
        asmBuilder->Save( asmName );
    }

};

void _tmain()
{

    // Create a CodeEmitter to handle assembly creation.
    CodeEmitter ^ e = gcnew CodeEmitter("programAssem.exe");

    // Create a new type.
    TypeBuilder^ mainClass = e->CreateType("MainClass");
    
    // Create a new method.
    MethodBuilder^ mBuilder = mainClass->DefineMethod("mainMethod", MethodAttributes::Static);

    // Create an ILGenerator and emit IL for 
    // a simple "Hello World." program.
    ILGenerator^ ilGen = mBuilder->GetILGenerator();

    ilGen->Emit(OpCodes::Ldstr, "Hello World");

    array<Type^>^mType = {String::typeid};

    MethodInfo^ writeMI = Console::typeid->GetMethod( "WriteLine", mType );

    ilGen->EmitCall(OpCodes::Call, writeMI, nullptr );

    ilGen->Emit( OpCodes::Ret );

    /////////////////////////////////////////////////
    /////////////////////////////////////////////////
    // Apply a required custom modifier
    // to a field.
    /////////////////////////////////////////////////
    /////////////////////////////////////////////////

    array<Type^>^fType = {IsUdtReturn::typeid};

    mainClass->DefineField("modifiedInteger", Type::GetType("System.Type"), fType, nullptr, FieldAttributes::Private);

    // Create the type.
    mainClass->CreateType();

    // Write the assembly using a reference to 
    // the entry point.
    e->WriteAssembly(mBuilder);

    Console::WriteLine(L"Assembly created.");
}

Açıklamalar

Değiştirici IsUdtReturn , C++ derleyicisi tarafından yerel C++ nesnesi dönüş semantiğine sahip yöntemlerin dönüş türlerini işaretlemek için kullanılır. Yönetilen hata ayıklayıcı, yerel çağrı kuralının kullanımda olduğunu doğru şekilde belirlemek için bu değiştiriciyi tanır.

Derleyiciler, varsayılan davranış uygun olmadığında tam zamanında (JIT) derleyicinin değerleri işleme biçimini değiştirmek için meta veriler içinde özel değiştiriciler yayar. JIT derleyicisi özel bir değiştiriciyle karşılaştığında, değeri değiştiricinin belirttiği şekilde işler. Derleyiciler yöntemlere, parametrelere ve dönüş değerlerine özel değiştiriciler uygulayabilir. JIT derleyicisi gerekli değiştiricilere yanıt vermelidir, ancak isteğe bağlı değiştiricileri yoksayabilir.

Aşağıdaki tekniklerden birini kullanarak meta verilerde özel değiştiriciler yayabilirsiniz:

Şunlara uygulanır