程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> .net的reflection (1)

.net的reflection (1)

編輯:.NET實例教程

在我的文章《C#基於接口的編程》中,我談論了使用抽象的接口作為編程范例的各種優點。分離接口和執行過程,現在肯定不是新的思想,實際上它是com編程的核心。也許基於接口的在顯著的特征是多態性和即時檢查(RTTI).RTTI允許客戶端程序在運行時訪問對象。例如,如果一個對象執行IAthlete接口,一個客戶端程序能夠查找然後綁定這個接口用於調用和定位另一個接口。
查詢接口是強大的,是com+的基礎。同時,它對能夠在一個對象上執行接口導向又是極端有用的和明確必要的,這是.net一個特別重要的概念。在介紹這個概念之前,讓我們再回顧一些信息關於在.Net中功能性和分布的基礎元素--集合。
在COM(+),組件展開的邏輯和物理單元是一個.dll文件。在.net平台中,展開的基礎單元是集合。與COM(+)組件不同的是一個.net或許是有多個文件組成,盡管它被看作是一個單一的何不可分割的功能和執行單元。一個集合文件也是自描述的,它包含被稱之為中間語言的管制代碼和附加的元數據,這個元數據給想綁定到這些代碼的客戶提供豐富的信息。.Net的每個集合是著名的清單數據結構。清單包含下列信息:
1、姓名和版本信息
2、其它集合的參考信息
3、安全邊界的信息。
4、集合中所有類型的信息

毫無疑問,集合清單類似於COM(+)的類型庫。清單有在類型庫中不存在的優點。這個超過了這一課的范圍,我們將在這篇文章的第二部分進行講述。被利用.net集合的客戶端程序將要使用清單。因為每個集合包含元數據的許多信息,客戶程序在運行時能夠得到集合的內容。這個過程就叫做reflection.Reflection不僅能夠查詢基礎類,而且運行時能動態調用方法,甚至於輸出能夠直接執行的IL代碼。在你的代碼中有兩種方法來使用reflection,Reflection API 和 System.Reflection 名字空間。System.reflection是極端負責的,它包含將近40個類。在文章的其他部分,我將介紹reflection的基礎,如何用它區查詢集合類,方法,以及運行時調用方法的類型。為了示范在.Net中的reflection名字空間,我將用下面的"reflection"類來說明:

// Reflect.cs
namespace CSharpReflectionSamples
{
using System;

///


/// The reflect class will be used to demonstrate the basics of
/// .Net reflection. This class contains private member vars,
/// a constructor, a sample method, and sample Accessor methods.
///

public class Reflect
{
// private member variables
private int intTest;
private string strTest;

// constructor
public Reflect(int intData)
{
// constructor logic
intTest = intData;
}

// basic method
public int AMethod(int intData)
{
return intData*intData;
}

public string S
{
get
{
// return member var
return strTest;
}
set
{
// set member var
S = value;
}
}
}
}

正如你所看到的那樣,這個類包含一個構造器,一個例子方法,一個例子存取方法(得到和設置)。在System.Reflaction 名字空間核心是一個名為type的類。這個type類型包含許多方法和到許多類信息的一種登錄入口。Type類參考可以靠typeof或者GetType的方法得到。下表列舉了一些類類型的方法,包括示例GetTypeof 和typeof方法的代碼段。
Name
Description

GetFIElds()
Returns an array of FieldInfo objects describing the fIElds in the class.

GetMethods()
Returns an array of MethodInfo objects describing the methods of the class.

GetConstructors()
Returns all the constructors for an object.

GetInterfaces()
Gets all interfacs implemented by the type.

GetMembers()
Gets all the members (fIElds, methods, events, etc.) of the current type.

InvokeMember()
Invokes a member of the current type.

BaseType
Gets a Type object for the type's immediate base type.

IsAbstract
Returns true if the type is abstract.

IsClass
Returns true if the type is a class.

IsEnum
Returns true if the type is an enum.

IsNestedPublic
Returns true if a type is nested within another and is public.

Namespace
RetrIEves the namespace of the type.



namespace CSharpReflectionSamples
{
using System;
using System.Reflection;

///
/// Summary description for ClIEnt.
///

public class ClIEnt
{
public static void Main()
{
// the typeof Operator and the GetType method
// both return a 'Type' object.
Type type1 = typeof(Reflect);
Reflect objTest = new Reflect(0);
Type type2 = objTest.GetType();

Console.WriteLine("Type of objTest is {0}", type2);

}
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved