IsSignUnspecifiedByte Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Označuje, že modifikátor není podepsaný ani bez znaménka. Tato třída se nemůže dědit.
public ref class IsSignUnspecifiedByte abstract sealed
public static class IsSignUnspecifiedByte
type IsSignUnspecifiedByte = class
Public Class IsSignUnspecifiedByte
- Dědičnost
-
IsSignUnspecifiedByte
Příklady
Následující příklad kódu vytvoří sestavení pomocí tříd v System.Reflection.Emit oboru názvů a vygeneruje IsSignUnspecifiedByte modifikátor do tohoto sestavení.
#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 main()
{
// Create a CodeEmitter to handle assembly creation.
CodeEmitter ^ e = gcnew CodeEmitter("program.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 = {IsSignUnspecifiedByte::typeid};
mainClass->DefineField("modifiedInteger", Type::GetType("System.Byte"), 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.");
}
Poznámky
Některé programovací jazyky, například C++, rozpoznávají tři odlišné char
hodnoty: signed char
, unsigned char
a char
. Chcete-li odlišit nezměněný char
typ od ostatních, kompilátor jazyka Microsoft C++ přidá IsSignUnspecifiedByte modifikátor ke každému char
typu vygenerovanému do sestavení.
Kompilátory generují vlastní modifikátory v rámci metadat, aby změnily způsob, jakým kompilátor jit (just-in-time) zpracovává hodnoty, když výchozí chování není vhodné. Když kompilátor JIT narazí na vlastní modifikátor, zpracovává hodnotu způsobem, který modifikátor určuje. Kompilátory můžou použít vlastní modifikátory na metody, parametry a návratové hodnoty. Kompilátor JIT musí reagovat na požadované modifikátory, ale může ignorovat volitelné modifikátory.
Vlastní modifikátory můžete do metadat vygenerovat pomocí jedné z následujících technik:
Použití metod ve TypeBuilder třídě, jako DefineMethodjsou , DefineField, DefineConstructora DefineProperty.
Generování instrukčního souboru jazyka MSIL (Microsoft Intermediate Language), který obsahuje volání
modopt
amodreq
a sestavení souboru pomocíIlasm.exe (IL Assembler).Použití nespravovaného rozhraní API reflexe.