Type, MethodInfo, aktywacja i własne atrybuty
Proszę pobierać obiekty Type, lokalizować MethodInfo, wywoływać metody, tworzyć instancje za pomocą Activator oraz definiować i odczytywać własne atrybuty.
Type, MethodInfo, aktywacja i własne atrybuty to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.
Przegląd
Cel: Bezpiecznie używać refleksji.
- Pobierać Type
- Znajdować MethodInfo
- Tworzyć za pomocą Activator
- Definiować i odczytywać atrybuty
Pobieranie Type
Można pobrać Type za pomocą typeof, z instancji za pomocą GetType() albo po nazwie za pomocą Type.GetType.
using System;
public class Sample { }
public class Program
{
public static void Main(string[] args)
{
// 1) From a compile-time type
Type t1 = typeof(Sample);
// 2) From an instance
Sample s = new Sample();
Type t2 = s.GetType();
// 3) From a full name (needs assembly-qualified name for external types)
Type t3 = Type.GetType("System.String");
Console.WriteLine(t1.Name + ", " + t2.FullName + ", " + (t3 == null ? "null" : t3.Name));
}
}
MethodInfo.Invoke
Należy użyć GetMethod, aby znaleźć metodę, oraz Invoke, aby ją wywołać. Należy przekazać instancję i tablicę argumentów.
using System;
using System.Reflection;
public class Greeter
{
public string Hello(string name) { return "Hello, " + name; }
}
public class Program
{
public static void Main(string[] args)
{
Greeter g = new Greeter();
Type t = typeof(Greeter);
MethodInfo mi = t.GetMethod("Hello"); // public instance method
object result = mi.Invoke(g, new object[] { "Ada" }); // call dynamically
Console.WriteLine(result); // Hello, Ada
}
}
Podstawy aktywacji
Activator.CreateInstance(Type) konstruuje obiekt przy użyciu publicznego konstruktora bez parametrów.
using System;
public class Person
{
public string Name { get; set; }
public Person() { Name = "Unknown"; } // parameterless ctor
}
public class Program
{
public static void Main(string[] args)
{
Type tp = typeof(Person);
object o = Activator.CreateInstance(tp); // uses public parameterless ctor
Person p = (Person)o;
p.Name = "Alan";
Console.WriteLine("Created: " + p.Name);
}
}
Atrybuty niestandardowe
Należy utworzyć niewielką klasę Attribute i pobrać ją za pomocą GetCustomAttributes z typu lub metody.
using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class LabelAttribute : Attribute
{
public string Text { get; private set; }
public LabelAttribute(string text) { Text = text; }
}
[Label("Utility class")]
public class Utils
{
[Label("Adds two ints")]
public static int Add(int a, int b) { return a + b; }
}
public class Program
{
public static void Main(string[] args)
{
Type t = typeof(Utils);
// Read class attribute
object[] classAttrs = t.GetCustomAttributes(typeof(LabelAttribute), false);
if (classAttrs.Length > 0)
Console.WriteLine("Class label: " + ((LabelAttribute)classAttrs[0]).Text);
// Read method attribute
MethodInfo mi = t.GetMethod("Add");
object[] methodAttrs = mi.GetCustomAttributes(typeof(LabelAttribute), false);
if (methodAttrs.Length > 0)
Console.WriteLine("Method label: " + ((LabelAttribute)methodAttrs[0]).Text);
}
}
Wskazówki i bezpieczeństwo
Wskazówki:
- Należy sprawdzać, czy Type.GetType nie zwraca wartości null, oraz obsługiwać brakujące składowe.
- W miarę możliwości należy preferować typeof (jest szybsze i bezpieczniejsze).
- Należy centralizować użycie refleksji i dobrze je dokumentować.
- Należy używać BindingFlags do wyszukiwania niepublicznych lub statycznych składowych.
Podstawy aktywacji
Podsumowanie
Podsumowanie: Należy pobrać obiekt Type, znaleźć MethodInfo, utworzyć obiekt za pomocą Activator i odczytać atrybuty przy użyciu GetCustomAttributes.
Często zadawane pytania
Czy lekcja „Type, MethodInfo, aktywacja i własne atrybuty” jest bezpłatna?
Tak — pełny tekst „Type, MethodInfo, aktywacja i własne atrybuty” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Type, MethodInfo, aktywacja i własne atrybuty”?
Proszę pobierać obiekty Type, lokalizować MethodInfo, wywoływać metody, tworzyć instancje za pomocą Activator oraz definiować i odczytywać własne atrybuty. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.
Ile czasu zajmuje lekcja „Type, MethodInfo, aktywacja i własne atrybuty”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Type, MethodInfo, aktywacja i własne atrybuty
- Informacje na poziomie źródła (atrybuty Caller)
- Lekkie scenariusze metaprogramowania