TypeBuilder.DefineMethod Yöntem

Tanım

türüne bir yöntem ekler.

Aşırı Yüklemeler

DefineMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][])

Türüne belirtilen ad, yöntem öznitelikleri, çağırma kuralı, yöntem imzası ve özel değiştiricilerle yeni bir yöntem ekler.

DefineMethod(String, MethodAttributes, CallingConventions, Type, Type[])

Belirtilen ad, yöntem öznitelikleri, çağırma kuralı ve yöntem imzası ile türüne yeni bir yöntem ekler.

DefineMethod(String, MethodAttributes, CallingConventions)

Türüne belirtilen ada, yöntem özniteliklerine ve çağırma kuralına sahip yeni bir yöntem ekler.

DefineMethod(String, MethodAttributes)

Belirtilen ad ve yöntem öznitelikleriyle türüne yeni bir yöntem ekler.

DefineMethod(String, MethodAttributes, Type, Type[])

Türüne, belirtilen ad, yöntem öznitelikleri ve yöntem imzasıyla yeni bir yöntem ekler.

DefineMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][])

Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs

Türüne belirtilen ad, yöntem öznitelikleri, çağırma kuralı, yöntem imzası ve özel değiştiricilerle yeni bir yöntem ekler.

C#
public System.Reflection.Emit.MethodBuilder DefineMethod (string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? returnTypeRequiredCustomModifiers, Type[]? returnTypeOptionalCustomModifiers, Type[]? parameterTypes, Type[][]? parameterTypeRequiredCustomModifiers, Type[][]? parameterTypeOptionalCustomModifiers);
C#
public System.Reflection.Emit.MethodBuilder DefineMethod (string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers);

Parametreler

name
String

Yöntemin adı. name katıştırılmış null değerleri içeremez.

attributes
MethodAttributes

yönteminin öznitelikleri.

callingConvention
CallingConventions

yönteminin çağırma kuralı.

returnType
Type

yönteminin dönüş türü.

returnTypeRequiredCustomModifiers
Type[]

yönteminin dönüş türü için gibi gerekli özel değiştiricileri IsConsttemsil eden bir tür dizisi. Dönüş türünde gerekli özel değiştirici yoksa belirtin null.

returnTypeOptionalCustomModifiers
Type[]

yönteminin dönüş türü için gibi isteğe bağlı özel değiştiricileri IsConsttemsil eden bir tür dizisi. Dönüş türünde isteğe bağlı özel değiştirici yoksa belirtin null.

parameterTypes
Type[]

yönteminin parametrelerinin türleri.

parameterTypeRequiredCustomModifiers
Type[][]

Tür dizileri dizisi. Her tür dizisi, gibi IsConstilgili parametre için gerekli özel değiştiricileri temsil eder. Belirli bir parametrenin gerekli özel değiştiricileri yoksa, bir tür dizisi yerine belirtin null . Parametrelerin hiçbirinin özel değiştiricisi gerekmiyorsa, dizi dizisi yerine belirtin null .

parameterTypeOptionalCustomModifiers
Type[][]

Tür dizileri dizisi. Her tür dizisi, ilgili parametre için isteğe bağlı özel değiştiricileri temsil eder, örneğin IsConst. Belirli bir parametrenin isteğe bağlı özel değiştiricisi yoksa, bir tür dizisi yerine belirtin null . Parametrelerin hiçbirinin isteğe bağlı özel değiştiricileri yoksa, dizi dizisi yerine belirtin null .

Döndürülenler

MethodBuilder Yeni eklenen yöntemi temsil eden bir nesne.

Özel durumlar

uzunluğu name sıfırdır.

-veya-

Bu yöntemin üst öğesinin türü bir arabirimdir ve bu yöntem sanal değildir (Overridable Visual Basic'te).

-veya-

veya parameterTypeOptionalCustomModifiers boyutuparameterTypeRequiredCustomModifiers, boyutuna parameterTypeseşit değildir.

name, null değeridir.

Türü daha önce kullanılarak CreateType()oluşturulmuştur.

-veya-

Geçerli dinamik türü için IsGenericType özelliği şeklindedir true, ancak IsGenericTypeDefinition özelliği şeklindedir false.

Açıklamalar

Özel değiştiriciler belirtmeniz gerekiyorsa bu aşırı yüklemeyi kullanın. Yöntem oluşturulduktan sonra özel değiştiriciler belirtmeniz gerekirse, örneğin, parametre türleri genel tür parametreleriyle belirtilen genel bir yöntemle, yöntemi tanımlamak için veya DefineMethod(String, MethodAttributes, CallingConventions) yöntemi aşırı yüklemelerini kullanabilir DefineMethod(String, MethodAttributes) ve ardından yöntemini kullanarak MethodBuilder.SetSignature parametreyi tanımlayabilir ve özel değiştiricilerle türleri döndürebilirsiniz.

Not

Özel değiştiriciler hakkında daha fazla bilgi için bkz. ECMA C# ve Ortak Dil Altyapısı Standartları ve Standart ECMA-335 - Ortak Dil Altyapısı (CLI).

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

DefineMethod(String, MethodAttributes, CallingConventions, Type, Type[])

Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs

Belirtilen ad, yöntem öznitelikleri, çağırma kuralı ve yöntem imzası ile türüne yeni bir yöntem ekler.

C#
public System.Reflection.Emit.MethodBuilder DefineMethod (string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes);
C#
public System.Reflection.Emit.MethodBuilder DefineMethod (string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes);

Parametreler

name
String

Yöntemin adı. name katıştırılmış null değerleri içeremez.

attributes
MethodAttributes

yönteminin öznitelikleri.

callingConvention
CallingConventions

yönteminin çağırma kuralı.

returnType
Type

yönteminin dönüş türü.

parameterTypes
Type[]

yönteminin parametrelerinin türleri.

Döndürülenler

MethodBuilder Yeni tanımlanan yöntemi temsil eden bir.

Özel durumlar

uzunluğu name sıfırdır.

-veya-

Bu yöntemin üst öğesinin türü bir arabirimdir ve bu yöntem sanal değildir (Overridable Visual Basic'te).

name, null değeridir.

Türü daha önce kullanılarak CreateType()oluşturulmuştur.

-veya-

Geçerli dinamik türü için IsGenericType özelliği şeklindedir true, ancak IsGenericTypeDefinition özelliği şeklindedir false.

Örnekler

Aşağıdaki kod örneği, bir oluşturucunun belirli imzasını ve özniteliklerini dinamik bir türe ayarlamak ve MSIL popülasyonu için karşılık gelen MethodBuilder bir döndürmek için uygulamasının kullanımını DefineMethod gösterir.

C#
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
using System.Security.Permissions;

public interface IMyInterface
{
   String HelloMethod(String parameter);
}

public class Example
{
   public static void Main()
   {
      Type myNestedClassType = CreateCallee(Thread.GetDomain());
      // Cretae an instance of 'MyNestedClass'.
      IMyInterface myInterface =
         (IMyInterface)Activator.CreateInstance(myNestedClassType);
      Console.WriteLine(myInterface.HelloMethod("Bill"));
   }

   // Create the callee transient dynamic assembly.
   private static Type CreateCallee(AppDomain myAppDomain)
   {
      AssemblyName myAssemblyName = new AssemblyName();
      myAssemblyName.Name = "Example";
      // Create the callee dynamic assembly.
      AssemblyBuilder myAssembly =
         myAppDomain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.Run);
      // Create a dynamic module in the callee assembly.
      ModuleBuilder myModule = myAssembly.DefineDynamicModule("EmittedModule");
      // Define a public class named "MyHelloWorld".
      TypeBuilder myHelloWorldType =
         myModule.DefineType("MyHelloWorld", TypeAttributes.Public);
      // Define a public nested class named 'MyNestedClass'.
      TypeBuilder myNestedClassType =
         myHelloWorldType.DefineNestedType("MyNestedClass",
            TypeAttributes.NestedPublic, typeof(Example),
            new Type[]{typeof(IMyInterface)});
      // Implement 'IMyInterface' interface.
      myNestedClassType.AddInterfaceImplementation(typeof(IMyInterface));
      // Define 'HelloMethod' of 'IMyInterface'.
      MethodBuilder myHelloMethod =
         myNestedClassType.DefineMethod("HelloMethod",
            MethodAttributes.Public | MethodAttributes.Virtual,
            typeof(String), new Type[]{typeof(String)});
      // Generate IL for 'GetGreeting' method.
      ILGenerator myMethodIL = myHelloMethod.GetILGenerator();
      myMethodIL.Emit(OpCodes.Ldstr, "Hi! ");
      myMethodIL.Emit(OpCodes.Ldarg_1);
      MethodInfo infoMethod =
         typeof(String).GetMethod("Concat",new Type[]{typeof(string),typeof(string)});
      myMethodIL.Emit(OpCodes.Call, infoMethod);
      myMethodIL.Emit(OpCodes.Ret);

      MethodInfo myHelloMethodInfo =
         typeof(IMyInterface).GetMethod("HelloMethod");
      // Implement 'HelloMethod' of 'IMyInterface'.
      myNestedClassType.DefineMethodOverride(myHelloMethod, myHelloMethodInfo);
      // Create 'MyHelloWorld' type.
      Type myType = myHelloWorldType.CreateType();
      // Create 'MyNestedClass' type.
      return myNestedClassType.CreateType();
   }
}

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

DefineMethod(String, MethodAttributes, CallingConventions)

Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs

Türüne belirtilen ada, yöntem özniteliklerine ve çağırma kuralına sahip yeni bir yöntem ekler.

C#
public System.Reflection.Emit.MethodBuilder DefineMethod (string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention);

Parametreler

name
String

Yöntemin adı. name katıştırılmış null değerleri içeremez.

attributes
MethodAttributes

yönteminin öznitelikleri.

callingConvention
CallingConventions

yönteminin çağırma kuralı.

Döndürülenler

MethodBuilder Yeni tanımlanan yöntemi temsil eden bir.

Özel durumlar

uzunluğu name sıfırdır.

-veya-

Bu yöntemin üst öğesinin türü bir arabirimdir ve bu yöntem sanal değildir (Overridable Visual Basic'te).

name, null değeridir.

Türü daha önce kullanılarak CreateType()oluşturulmuştur.

-veya-

Geçerli dinamik türü için IsGenericType özelliği şeklindedir true, ancak IsGenericTypeDefinition özelliği şeklindedir false.

Açıklamalar

Yöntemi tanımladığınız sırada yöntem imzasını bilmediğiniz durumlarda bu yöntem aşırı yüklemesini kullanın. Örneğin, bir genel yöntemin parametre türleri ve dönüş türü, yöntemin türüne eklendikten sonra tanımlanması gereken yöntemin genel tür parametreleri tarafından belirtilebilir. Yöntemin parametreleri ve dönüş türü daha sonra yöntemi kullanılarak MethodBuilder.SetSignature ayarlanabilir.

Ayrıca bkz.

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

DefineMethod(String, MethodAttributes)

Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs

Belirtilen ad ve yöntem öznitelikleriyle türüne yeni bir yöntem ekler.

C#
public System.Reflection.Emit.MethodBuilder DefineMethod (string name, System.Reflection.MethodAttributes attributes);

Parametreler

name
String

Yöntemin adı. name katıştırılmış null değerleri içeremez.

attributes
MethodAttributes

yönteminin öznitelikleri.

Döndürülenler

MethodBuilder Yeni tanımlanan yöntemi temsil eden bir.

Özel durumlar

uzunluğu name sıfırdır.

-veya-

Bu yöntemin üst öğesinin türü bir arabirimdir ve bu yöntem sanal değildir (Overridable Visual Basic'te).

name, null değeridir.

Türü daha önce kullanılarak CreateType()oluşturulmuştur.

-veya-

Geçerli dinamik türü için IsGenericType özelliği şeklindedir true, ancak IsGenericTypeDefinition özelliği şeklindedir false.

Örnekler

Aşağıdaki kod örneği, parametre türü ve dönüş türü genel tür parametreleri tarafından belirtilen adlı DemoMethod genel bir yöntemi tanımlar. yöntemi, standart çağırma kuralı kullanılarak imza olmadan tanımlanır. yöntemi MethodBuilder.DefineGenericParameters genel bir yöntem oluşturmak DemoMethod için kullanılır ve yeni tanımlanan tür parametreleri daha sonra imza ve dönüş türü için kullanılır.

Bu kod örneği, yöntemi için DefineGenericParameters sağlanan daha büyük bir örneğin parçasıdır.

C#
// Define a Shared, Public method with standard calling
// conventions. Do not specify the parameter types or the
// return type, because type parameters will be used for
// those types, and the type parameters have not been
// defined yet.
MethodBuilder demoMethod = demoType.DefineMethod(
    "DemoMethod",
    MethodAttributes.Public | MethodAttributes.Static
);
C#
// Defining generic parameters for the method makes it a
// generic method. By convention, type parameters are
// single alphabetic characters. T and U are used here.
//
string[] typeParamNames = {"T", "U"};
GenericTypeParameterBuilder[] typeParameters =
    demoMethod.DefineGenericParameters(typeParamNames);

// The second type parameter is constrained to be a
// reference type.
typeParameters[1].SetGenericParameterAttributes(
    GenericParameterAttributes.ReferenceTypeConstraint);
C#
// Set parameter types for the method. The method takes
// one parameter, and its type is specified by the first
// type parameter, T.
Type[] parms = {typeParameters[0]};
demoMethod.SetParameters(parms);

// Set the return type for the method. The return type is
// specified by the second type parameter, U.
demoMethod.SetReturnType(typeParameters[1]);

Açıklamalar

Yöntemi tanımladığınız sırada yöntem imzasını bilmediğiniz durumlarda bu yöntem aşırı yüklemesini kullanın. Örneğin, bir genel yöntemin parametre türleri ve dönüş türü, yöntemin türüne eklendikten sonra tanımlanması gereken yöntemin genel tür parametreleri tarafından belirtilebilir. Yöntemin parametreleri ve dönüş türü daha sonra yöntemi kullanılarak MethodBuilder.SetSignature ayarlanabilir.

Bu yöntem aşırı yüklemesi ile CallingConventions.Standardbir yöntemi tanımlar. farklı bir çağırma kuralıyla imzasız bir yöntem tanımlamanız gerekiyorsa yöntem aşırı yüklemesini DefineMethod(String, MethodAttributes, CallingConventions) kullanın.

Ayrıca bkz.

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

DefineMethod(String, MethodAttributes, Type, Type[])

Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs

Belirtilen ad, yöntem öznitelikleri ve yöntem imzası ile türüne yeni bir yöntem ekler.

C#
public System.Reflection.Emit.MethodBuilder DefineMethod (string name, System.Reflection.MethodAttributes attributes, Type? returnType, Type[]? parameterTypes);
C#
public System.Reflection.Emit.MethodBuilder DefineMethod (string name, System.Reflection.MethodAttributes attributes, Type returnType, Type[] parameterTypes);

Parametreler

name
String

Yöntemin adı. name katıştırılmış null içeremez.

attributes
MethodAttributes

yönteminin öznitelikleri.

returnType
Type

Yönteminin dönüş türü.

parameterTypes
Type[]

yönteminin parametrelerinin türleri.

Döndürülenler

Tanımlanan yöntem.

Özel durumlar

uzunluğu name sıfırdır.

-veya-

Bu yöntemin üst öğesinin türü bir arabirimdir ve bu yöntem sanal değildir (Overridable Visual Basic'te).

name, null değeridir.

Türü daha önce kullanılarak CreateType()oluşturulmuştur.

-veya-

Geçerli dinamik tür IsGenericType için özelliği şeklindedir true, ancak IsGenericTypeDefinition özelliği şeklindedir false.

Örnekler

Aşağıdaki kod örneği, bir oluşturucunun özel imzasını ve özniteliklerini dinamik bir türe ayarlamak ve MSIL popülasyonu için karşılık gelen MethodBuilder bir döndürmek için kullanımını DefineMethod gösterir.

C#
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
using System.Security.Permissions;

public interface IMyInterface
{
   String HelloMethod(String parameter);
}

public class Example
{
   public static void Main()
   {
      Type myNestedClassType = CreateCallee(Thread.GetDomain());
      // Cretae an instance of 'MyNestedClass'.
      IMyInterface myInterface =
         (IMyInterface)Activator.CreateInstance(myNestedClassType);
      Console.WriteLine(myInterface.HelloMethod("Bill"));
   }

   // Create the callee transient dynamic assembly.
   private static Type CreateCallee(AppDomain myAppDomain)
   {
      AssemblyName myAssemblyName = new AssemblyName();
      myAssemblyName.Name = "Example";
      // Create the callee dynamic assembly.
      AssemblyBuilder myAssembly =
         myAppDomain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.Run);
      // Create a dynamic module in the callee assembly.
      ModuleBuilder myModule = myAssembly.DefineDynamicModule("EmittedModule");
      // Define a public class named "MyHelloWorld".
      TypeBuilder myHelloWorldType =
         myModule.DefineType("MyHelloWorld", TypeAttributes.Public);
      // Define a public nested class named 'MyNestedClass'.
      TypeBuilder myNestedClassType =
         myHelloWorldType.DefineNestedType("MyNestedClass",
            TypeAttributes.NestedPublic, typeof(Example),
            new Type[]{typeof(IMyInterface)});
      // Implement 'IMyInterface' interface.
      myNestedClassType.AddInterfaceImplementation(typeof(IMyInterface));
      // Define 'HelloMethod' of 'IMyInterface'.
      MethodBuilder myHelloMethod =
         myNestedClassType.DefineMethod("HelloMethod",
            MethodAttributes.Public | MethodAttributes.Virtual,
            typeof(String), new Type[]{typeof(String)});
      // Generate IL for 'GetGreeting' method.
      ILGenerator myMethodIL = myHelloMethod.GetILGenerator();
      myMethodIL.Emit(OpCodes.Ldstr, "Hi! ");
      myMethodIL.Emit(OpCodes.Ldarg_1);
      MethodInfo infoMethod =
         typeof(String).GetMethod("Concat",new Type[]{typeof(string),typeof(string)});
      myMethodIL.Emit(OpCodes.Call, infoMethod);
      myMethodIL.Emit(OpCodes.Ret);

      MethodInfo myHelloMethodInfo =
         typeof(IMyInterface).GetMethod("HelloMethod");
      // Implement 'HelloMethod' of 'IMyInterface'.
      myNestedClassType.DefineMethodOverride(myHelloMethod, myHelloMethodInfo);
      // Create 'MyHelloWorld' type.
      Type myType = myHelloWorldType.CreateType();
      // Create 'MyNestedClass' type.
      return myNestedClassType.CreateType();
   }
}

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1