Ongoing

Kozen's Blog

导航

定义相同FullName的类型

Posted on 2005-01-09 22:16  Kozen  阅读(1340)  评论(10编辑  收藏  举报

在用.Net Framework 1.1编写一个程序集的时候,编译器禁止你在同一个名字空间中设计两个名称相同的类,这似乎是理所当然的事情。
但我最近发现,在两个不同的程序集中倒是可以分别设计两个名字空间和类型名称完全相同的类,并可将此两个程序集最终编译到同一个可执行程序中正常运行。对此我十分疑惑,若在运行时有一个程序集同时引用定义了该名称类型的两个程序集,那在创建该类实例的时候究竟以哪份类的定义为准呢?
继续思考中......

前段时间想通了这个问题,做点备忘吧。
其实在不同程序集中定义名称相同的类型也是可以理解的,或说是不能绝对避免的。
静态引用会有警告,而动态加载那就可以指定程序集后再加载类型。
事实上,同一个程序集若处于不同的物理目录也可在同一个AppDomain中加载两次,且由两个程序集对应的不同的Assembly对象通过反射创建的同个不同对象的类型也是不一样的。