- 相关推荐
net学习心得(6)
1.反射:反射是.net中的重要机制,通过反射可以在运行时获得.net中每一个类型,包括类、结构、委托和枚举的成员,包括方法、属性、事件,以及构造函数等。有了反射,既可以对每一个类型了如指掌。
下面来演示一下反射的实例
(1)新建一个类库项目。在解决方案上单击右键选择添加“新建项目”,在弹出来的框中选择“类库”,在下面名字栏中输入ClassLib。然后删除class1类,新添加一个类“ClassPerson”,添加如下代码:
namespace ClassLib
{
public class ClassPerson
{
public ClassPerson():this(null)
{
}
public ClassPerson(string strname)
{
name = strname;
}
private string name;
private string sex;
private int age;
public string Name
{
get { return name; }
set { name = value; }
}
public string Sex
{
get { return sex; }
set { sex = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public void SayHello()
{
if (null==name)
Console.WriteLine("hello World");
else
Console.WriteLine("Hello," + name);
}
}
}
添加完之后编译生成一下,就会在这个类库项目中的Bin\Debug中有一个ClassLib.dll文件。然后添加一个控制台应用程序。引入System.Reflaction的命名空间。添加的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;//添加反射的命名空间
namespace ConsoleApplication4
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("列出程序集中的所有类型");
Assembly ass = Assembly.LoadFrom("ClassLib.dll");
Type[] mytype = ass.GetTypes();
Type ClassPerson = null;
foreach (Type p in mytype)
{
Console.WriteLine(p.Name);
if (p.Name=="ClassPerson")
{
ClassPerson = p;
}
}
Console.WriteLine("列出ClassPersonl类中的所有的方法");
MethodInfo[] md = ClassPerson.GetMethods();
foreach(MethodInfo m in md)
{
Console.WriteLine(m.Name);
}
Console.WriteLine("实例化ClassPerson类,并调用SayHello方法");
object obj = Activator.CreateInstance(ClassPerson);
object objname=Activator.CreateInstance(ClassPerson,"飞鹰");
MethodInfo mysayhello = ClassPerson.GetMethod("SayHello");
mysayhello.Invoke(obj, null);//无参数构造函数
mysayhello.Invoke(objname, null);//有参构造函数
Console.ReadKey();
}
}
}
运行之后的结果是:
列出程序集中的所有类型
ClassPerson
列出ClassPersonl类中的所有的方法
get_Name
set_Name
get_Sex
set_Sex
get_Age
set_Age
SayHello
ToString
Equals
GetHashCode
GetType
实例化ClassPerson类,并调用SayHello方法
hello World
Hello,飞鹰
2.using的作用
(1)引入命名空间,如:using System。
(2)using别名。
格式:using 别名=包括详细命名空间信息的具体的类型
例如:在两个命名空间(nameSpace1,nameSpace2)里各有一个MyClass类,这时可以这样引入命名空间,
using aclass=nameSpace1.MyClass;
using bclass=nameSpace2.MyClass;
实例化时:
aclass my1=new aclass;
bclass my2=new bclass;
(3)using定义范围
即时释放资源,在范围结束时处理对象。例如:
using(Class1 cls1=new Class1())
{
}
在这个代码段结束时会触发cls1的Dispose方法释放资源。
相关文章:
学习.net心得
相关专题:[电脑][计算机]【net学习心得6】相关文章:
Net Worth:资本净值05-04
ASP.NET技术选型心得04-25
asp.net网上花店毕业设计开题报告04-27
ASP.NET的网站新闻管理系统设计与实现 -文秘文书12-15
《榜样6》观看学习心得11-20
Away from Net-bar Campaign远离网吧作文(通用15篇)04-10
《榜样6》学习心得(精选16篇)07-20
学校学生学习心得6篇03-11
职业礼仪学习心得6篇03-14
新课改培训学习心得6篇03-27