正如标题所示,这两者如何相互区别?我们可以安全地说他们俩一样吗?什么时候我们选择其中一个是最好的情况?我碰巧碰到了它,我不太确定。我希望有人能清除我的怀疑。提前致谢。
答案 0 :(得分:13)
this.GetType()
获取当前实例的多态类型,它实际上可能是您正在调用this.GetType()
的类的子类,并且该子类可能位于不同的程序集中。
请考虑以下事项:
AssemblyA.dll:
public class Foo
{
public void PrintAssembly()
{
Console.WriteLine(this.GetType().Assembly.GetName());
Console.WriteLine(Assembly.GetExecutingAssembly().GetName());
}
}
AssemblyB.dll:
public class Bar : Foo
{
}
现在,如果您运行以下代码:
Bar b = new Bar();
b.PrintAssembly();
确定装配的两种方法的结果不是相同的; this.GetType().Assembly
将返回AssemblyB(因为this
的实际类型为Bar
),而Assembly.GetExecutingAssembly()
返回AssemblyA,因为这是包含Foo.PrintAssembly()
方法的程序集。 / p>
只有当包含对this.GetType()
的调用的类型被密封时,才能确定它们引用同一个程序集。
答案 1 :(得分:3)
One告诉您类型所属的程序集的版本。另一个告诉您当前正在执行的程序集的版本。但你已经知道了。
我相信你可以放心地假设执行程序集总是与'this'所属的程序集相同。至少我想不出为什么不会这样。
为了清楚起见,您是选择其中一个还是另一个,取决于您是在寻找类型的程序集还是正在执行的程序集。假设你的父亲和你的老板是同一个人...你在餐桌上称他为你的老板吗?或者你把他介绍给你的女朋友作为你的老板?使用对下一个阅读代码的人有意义的那个。