Code
csharp
using System;
using System.Reflection;
public class Sample
{
public string Name { get; set; } = "";
public int Age { get; set; }
[Obsolete("Use Process2")]
public void Process() => Console.WriteLine("Process");
}
class Program
{
static void Main()
{
var type = typeof(Sample);
Console.WriteLine($"Type: {type.Name}");
Console.WriteLine("Properties:");
foreach (var p in type.GetProperties())
Console.WriteLine($" {p.PropertyType.Name} {p.Name}");
Console.WriteLine("Methods:");
foreach (var m in type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly))
Console.WriteLine($" {m.ReturnType.Name} {m.Name}()");
// Instantiate and invoke
var instance = Activator.CreateInstance<Sample>();
type.GetProperty("Name")!.SetValue(instance, "Alice");
type.GetMethod("Process")!.Invoke(instance, null);
// Read attribute
var attr = type.GetMethod("Process")!.GetCustomAttribute<ObsoleteAttribute>();
Console.WriteLine($"Obsolete? {attr is not null}");
}
}