Giriş
Şu satırı dahil ederiz.
Elimizde şöyle bir sınıf olsun.
Metodun hangi sınıf içinde olduğunu belirtir. Şöyle yaparız.
GetCustomAttributes metodu
Örnek ver
GetParameters metodu
Şöyle yaparız.
Parametreler object[] içinde geçilir. Date alan bir metodu çağırmak için şöyle yaparız.
Metod parametre almıyorsa şöyle yaparız
Açıklaması şöyle
Örnek
Şöyle yaparız.
Örnek
Elimizde şöyle bir kod olsun. Bu kodda yerel metod (local function) var.
Şöyle yaparız.
Şöyle yaparız.
IsPublic Alanı
Şöyle yaparız.
Elimizde generic iki tane metod olsun.
Şöyle yaparız.
Metodun ismini belirtir.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
using System.Reflection;
ConstructorElimizde şöyle bir sınıf olsun.
public class Foo
{
public void test()
{
...
}
}
Şöyle yaparız.MethodInfo methodInfo = typeof(Foo).GetMethod("test",
BindingFlags.Instance | BindingFlags.Public);
DeclaringType AlanıMetodun hangi sınıf içinde olduğunu belirtir. Şöyle yaparız.
if (methodInfo
.DeclaringType != typeof(Enumerable)){...}
Elimizde lambda'dan elde ettiğimiz bir MethodInfo olsunint myLocalVariable = 9000;
Func<int, bool> lambda2 = i => i == myLocalVariable;
MethodInfo lambdaMethod = lambda2.Method;
Lambda'nın sınıfından bir tane yaratıp çağırmak için şöyle yaparız.var instance = Activator.CreateInstance(lambdaMethod.DeclaringType);
result = lambdaMethod.Invoke(instance, new object[] { 9000 });
GetCustomAttributes metodu
Örnek ver
GetParameters metodu
Şöyle yaparız.
MethodInfo methodInfo = ...
var methodParams = methodInfo.GetParameters();
Invoke metodu - member için Parametreler object[] içinde geçilir. Date alan bir metodu çağırmak için şöyle yaparız.
var scheduleDate = new DateTime(2010, 03, 11);
MethodInfo methodInfo = ...;var o = ...;
methodInfo.Invoke(o, new object[] { scheduleDate });
Eğer üye bir metodu şöyle çağırırsakSystem.Reflection.TargetException exception fırlatılır. Hata açıklaması şöyledir.MethodInfo methodInfo = ...; var returnValue
= (bool)methodInfo
.Invoke(null, new object[] {...});
Invoke metodu - staticNon-static method requires a target.
Metod parametre almıyorsa şöyle yaparız
var returnValue = methodInfo.Invoke(null, new object[] { });
IsAssembly AlanıAçıklaması şöyle
Gets a value indicating whether the potential visibility of this method or constructor is described by System.Reflection.MethodAttributes.Assembly; that is, the method or constructor is visible at most to other types in the same assembly, and is not visible to derived types outside the assembly.
Şöyle yaparız.
if (methodInfo.IsAssembly) {...}
Elimizde şöyle bir kod olsun. Bu kodda yerel metod (local function) var.
public class Foo {
private static void FooMethod(){
void LocalFoo(){
...
}
...
}
}
private static metodları almak için şöyle yaparız.var methods = typeof(Foo).GetMethods(BindingFlags.Static|BindingFlags.NonPublic)
.Select(m=>m.Name).ToList();
Elimizde şu metodlar geçer.FooMethod
<FooMethod>g__LocalFoo5_0
IsAssembly ile local function'ı elemek için şöyle yaparız.var methods = typeof(Foo).GetMethods(BindingFlags.Static | BindingFlags.NonPublic)
.Where(x => !x.IsAssembly)
.Select(x => x.Name)
.ToList();
IsFamily AlanıŞöyle yaparız.
if (methodInfo.IsFamily) {...}
IsPrivate AlanıŞöyle yaparız.
if (methodInfo.IsPrivate) {...}
Şöyle yaparız.
if (methodInfo.IsPublic) {...}
MakeGenericMethod metoduElimizde generic iki tane metod olsun.
static class Extensions
{
public static string Primary<T>(this T obj)
{
Debug.Log(obj.ToString());
return "";
}
public static string List<T>(this List<T> obj)
{
Debug.Log(obj.ToString());
return "";
}
}
T parametresi olarak string vermek için şöyle yaparız.//This works
var pmi = typeof(Extensions).GetMethod("Primary");
var pgenerci = pmi.MakeGenericMethod(typeof(string));
pgenerci.Invoke(null, new object[] {"string" });
T parametresi olarak string vermek için şöyle yaparız.var mi = typeof(Extensions).GetMethod("List");
var stringGeneric = mi.MakeGenericMethod(typeof(string));
stringGeneric.Invoke(null, new object[] {new List<string> { "list of string"} });
MethodHandle AlanıŞöyle yaparız.
MethodInfo methodInfo = ...;
RuntimeHelpers.PrepareMethod(methodInfo
.MethodHandle);
Name AlanıMetodun ismini belirtir.
Örnek
Şöyle yaparız.
if (methodInfo.Name != "Contains"){...}
ÖrnekŞöyle yaparız.
var methods = typeof(Foo).GetMethods(BindingFlags.Static|BindingFlags.NonPublic)
.Where(m=>!m.Name.Contains("<")
.Select(m=>m.Name).ToList();
ReturnType AlanıŞöyle yaparız.
if (methodInfo.ReturnType != typeof(bool)) {...}
Hiç yorum yok:
Yorum Gönder