- 相關推薦
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