1、匿名方法:MyDelegate md=delegate(){"一个方法"};使用Delegate的时候很多时候没有必要使用一个普通的方法,因为这个方法只有这个Delegate会用,并且只用一次,这时候使用匿名方法最合适。匿名方法就是没有名字的方法。
2、lambda其实就是一个匿名函数而已,编译的时候会将lambda表达式,编译成一个C#匿名方法。但是使用lambda表达式会在很多时候减少代码量。
3、委托,其实就是一个类把方法包装了一下,委托都是继承自System.MulticastDelegate,而System.MulticastDelegate又继承自System.Delegate。多播委托就是一个委托数组。
4、调用Assembly的GetExportedTypes方法可以得到Assembly中定义的所有的public类型。调用Assembly的GetTypes()方法可以得到Assembly中定义的所有类型。调用Assembly中的GetType(name)方法可以得到Assembly中的定义全名为name的类型信息。
//Type t = typeof(Person);
类的全名称
//Console.WriteLine(t.FullName);
类所在的程序集的全名称
//Console.WriteLine(t.Assembly.FullName);
获取程序集中所有公共的类型
//Type[] types = ass.GetExportedTypes();
//foreach (Type type in types)
//{
// Console.WriteLine(type.Name);
//}
获取程序集中所有的类型
//Type[] tys = ass.GetTypes();
//foreach (Type item in tys)
//{
// Console.WriteLine(item.Name);
//}
根据名称获得一个类型
//Type tPerson = ass.GetType("抽象类.Circle");
//Console.WriteLine(tPerson.Name);
5、Activator.CreateInstance(Type t)会动态调用类的无参构造函数创建一个对象,返回值就是创建的对象,如果类没有无参构造函数就会报错。
GetConstructor(参数列表);//这个是找到带参数的构造函数。
Type类的方法:在编写调用插件的程序时,需要做一系列验证。
bool IsAssignableFrom(Type c):(直译:是否可以从c赋值)判断当前的类型的变量是不是可以接受c类型变量的赋值。
typeof(IPlugin).IsAssignableFrom(t)
bool IsInstanceOfType(object o):判断对象o是否是当前类的实例(当前类可以是o的类、父类、接口)
bool IsSubclassOf(Type c):判断当前类是否是类c的子类。类的事,没有接口的事。实现接口。
IsAbstract,判断是否为抽象的,含接口;IsAbstract:
这里的抽象的定义可以理解为不能实例化,接口,静态类,抽象类都不为抽象的。
6、获得当前应用程序运行根目录string path = AppDomain.CurrentDomain.BaseDirectory
Assembly.GetExecutingAssembly().Location
插件目录path = Path.Combine(path,”plugin”);
获得插件目录下所有插件Directory.GetFiles(path,“*.dll”)