事件委托反射程序集小总结

来源:互联网 发布:八宝茶的软件 编辑:程序博客网 时间:2024/05/01 08:44
操作xml文件 Dom
XmlDocument
Save()
Load()
SelectSingleNode("Order/OrderItem[@Name='diannao']") 根据xpath找某个节点

SelectNodes()
DocumentElement  根节点

XmlNode 
XmlElement
SetAttribute();  设置属性
Attributes[].Value  读取属性
InnerText
InnerXml
ChildNodes


委托:类型安全的指向函数的指针
使用步骤
1:声明一个委托 delegate string DelString(string s)2:定义一个委托变量
让委托指向一个方法
DelString del = new DelString(ToUpper)
DelString del = ToUpper
3:使用委托
del(s);


Sort(object[] arr,DelCompare del);


List<string> list;
list.Sort(Comparision<T> com)


list.RemoveAll();
匿名方法
DelString del = delegate(string s)
{
Console.WriteLine(s);
}
多播委托
DelMath del = Add;
del += Sub;   del = del + Sub;
del += Mul;
del -= Mul;

事件
原理  定义一个事件的时候生成一个私有的委托
通过生成的add和remove方法对委托注册方法和移除方法
调用事件的时候最终调用的是委托指向的方法
使用步骤
1:定义事件
public event EventHandler PlayOver;
2:调用事件
if (PlayOver != null)
{
PlayOver(this, null);
}
3:外部注册事件
   Player1 p = new Player1("真的恨你");
   p.PlayOver += new PlayOverEventHandler(p_PlayOver);
   p.Play();
EventHandler 事件委托


EventArgs 事件源参数




了解
c#代码  编译   MSIL(中间语言)
MSIL  ---   编译(JIT)    cpu可执行的代码


程序集


反射
Assembly 程序集
GetExportedTypes()获得程序集中的公共类型
GetTypes() 获得程序集中的所有类型
GetType(name) 根据类的全名称字符串 获得程序集中的类型
LoadFile(path)动态从文件加载程序集
Type 数据类型的类型
获取Type
Type t = typeof(Person)
Person p = new Person();
Type t = p.GetType();
t.FullName 获取类型的全名称
t.IsAssignableFrom(t1)判断t1类型的对象是否可以赋给t的对象
typyof(IPlugin).IsAssignableFrom(typeof(ShutDown))
t.IsInstanceOfType(object o)判断o对象是否是t类型
t.IsSubclassOf(t1)判断t是否是t1的子类
t.GetProperties()获取t类型中的所有属性
t.GetMethods()获取t类型中的所有方法
PropertyInfo
MethodInfo
Invoke(object o,object[] param)动态调用方法
IsPublic
IsAbstract

//动态创建对象

object o =  Activator.CreateInstance(typeof(Person));



lvar关键字
var i = 5;//int
var j = 23.56;//double
var k = "C Sharp";//string
var x;//错误
var y = null;//错误
var z = { 1, 2, 3 };//错误
lvar强类型.根据后面的值自动推断类型,编译时把推断的类型替换掉var


匿名类型
lvarp1 = new { Id = 1, Name = "YJingLee", Age = 22 };//属性也不需要申明
lvarp2 = new { Id = 2, Name = "XieQing", Age = 25 };
l数组
var intArray = new[] { 2, 3, 5, 6 };
var strArray = new[] { "Hello","World" };
var objArray= new[] { new { Name = "YJingLee", Age = 22 }, new { Name ="XieQing", Age = 25 } };
var a = intArray[0];
var b = strArray[0];
var c = objArray[1].Name;


对象与集合初始化器
l对象初始化器
Student stu= new Student{ Id = 1, Name = "YJingLee", Age = 22 };
更方便给对象赋值
l集合初始化器
List<int> num = new List<int> { 0, 1, 2, 6, 7, 8, 9 };
List< Student > stus= new List< Student >
{ new Student{Id=1,Name="YJingLee",Age=22},
new Student{Id=2,Name="XieQing",Age=25},
};


扩展方法
在StringHelper类中编写QuotedStr方法,使用时恐怖。判断一个字符串是否是正确的Email地址:IsEmail.
总感觉不是很好,要是看起来字符串有一个IsEmail方法多好呀。将IsEmail放到一个单独的类中,类声明为static(静态类),方法是静态方法,并且在第一个string上增加this。哇,string类“增加”IsEmail方法了,这只是假象,本质上仍然是静态方法,只不过C#提供了这样一个便利给大家,扩展方法内部不能调用被扩展类的私有、protected的东西。
声明扩展方法的步骤:类必须是static,方法是static,第一个参数是被扩展的对象,前面标注this。使用扩展方法的时候必须保证扩展方法类已经在当前代码中using


0 0
原创粉丝点击