static void Main(string[] args) { Student std = new Student(); Type type1 = std.GetType(); Type type2 = typeof(Student); Type type3 = typeof(int); Console.WriteLine(type1.Name); Console.WriteLine(type1.Namespace); } } class Student { public int Id { get; set; } public string Name { get; set; } }
internal class Program { static void Main(string[] args) { IStudent std = new Student(); Type s = std.GetType();//获取类型信息 object o = Activator.CreateInstance(s);//通过获取的类型信息创建object类型实例 MethodInfo stuMi = s.GetMethod("Study");//获取该类型的Study方法 stuMi.Invoke(o, null);//在指定对象上调用该方法,第二个参数是参数 } } interface IStudent { int Id { get; set; } string Name { get; set; } } class Student : IStudent { public int Id { get; set; } public string Name { get; set; } public void Study() { Console.WriteLine("我要学习"); } }
using System.Runtime.Loader; namespace Test { internal class Program { static void Main(string[] args) { Console.WriteLine(Environment.CurrentDirectory);//请在该路径下创建Animals文件夹 var floder = Path.Combine(Environment.CurrentDirectory, "Animals"); var files = Directory.GetFiles(floder); var animalTypes = new List<Type>(); foreach (var file in files) { var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(file); var types = assembly.GetTypes(); foreach (var t in types) { if(t.GetMethod("Voice")!=null) { animalTypes.Add(t); } } }
while (true) { for(int i = 0; i< animalTypes.Count; i++) { Console.WriteLine($"{i+1},{animalTypes[i].Name}"); } Console.WriteLine("===================="); Console.WriteLine("Please choose animal"); int index = int.Parse(Console.ReadLine()); if(index>animalTypes.Count || index<1) { Console.WriteLine("No such an animal.Try again!"); continue; } Console.WriteLine("How many times?"); int times = int.Parse(Console.ReadLine()); var t = animalTypes[index-1]; var m = t.GetMethod("Voice"); var o = Activator.CreateInstance(t); m.Invoke(o, new object[] { times }); } } } }
插件程序:
1 2 3 4 5 6 7 8 9
namespace Animals { public class Cat { public void Voice(int times) { for(int i = 0; i < times; i++) { Console.WriteLine("喵"); } } } }