推荐文档列表

net学习心得6

时间:2021-12-13 11:15:17 心得体会 我要投稿

net学习心得(6)

1.反射:反射是.net中的重要机制,通过反射可以在运行时获得.net中每一个类型,包括类、结构、委托和枚举的成员,包括方法、属性、事件,以及构造函数等。有了反射,既可以对每一个类型了如指掌。

net学习心得(6)

下面来演示一下反射的实例

(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心得

相关专题:[电脑][计算机]