How to get Type


所有程序都是在mono环境下实验的

在.Net 中 Type 对于反射来说是一个至关重要的数据类型。在 .NET 中 有三种方法可以得到 Type,
  1. Object.GetType();
  2. System.Type.GetType();
  3. typeof();

方法一,已知一个对象,根据对象获得其 Type,例如:

c# 代码
 
  1. Book b = new Book();  
  2.   
  3. Type typeOfABook = b.GetType();  



方法二,根据类的名称,assembly的名称获得有关类的 Type, 例如一个Book类在Bookstore的namespace里,

c# 代码
 
  1. //------------- Book.cs ---------------//  
  2. namespace Bookstore{  
  3.     public class Book{  
  4.         ....  
  5.     }  
  6. }  


编译个文件到 mybook.dll 里面。 要动态的获得有关 Book 类的所有信息,可以

Type typeOfBook = Type.GetType("Bookstore.Book, mybook.dll", false, true);

* 要注意的是: mybook.dll 要保存在和可执行文件相同的目录下面, 我试过用下面的 .config 来添加寻找
assembly的路径,但是没有什么用处。

xml 代码
 
  1. <?xml version="1.0"?>  
  2. <configuration>  
  3.     <runtime>  
  4.         <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
  5.             <probing privatePath="modules"/>  
  6.         </assemblyBinding>  
  7.     </runtime>  
  8. </configuration>  


在msdn里有一段话,也许可以解释:

You can also make a dynamic reference to an assembly by providing the
calling method with only partial information about the assembly, such as
specifying only the assembly name. In this case, only the application
directory is searched for the assembly, and no other checking occurs.

大致意思是, 如果用的不是assembly的全名(assembly name, version, culture, and public key token)
则 .NET 只会在应用程序的目录里寻找相应的类。 这里不清楚的是对 "application directory" 的解释,
是指应用程序所在的目录, 还是包括这个目录的子目录? 不知道怎样可以打印出 .NET 的 "library path"。



方法三,类似方法二

c# 代码
 
  1. Type typeOfBook = typeof(Book);  


前提条件是 Book 所在的 assembly 必须在 GAC(Global Assembly Cache)中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值