这个.GetType().Assembly.GetName().版本和Assembly.GetExecutingAssembly().GetName().版本有什么区别?

woo*_*ddy 7 .net c#

正如标题所示,这两者如何相互区别?我们可以安全地说他们俩一样吗?什么时候我们选择其中一个是最好的情况?我碰巧碰到了它,我不太确定.我希望有人能清除我的怀疑.提前致谢.

Sve*_*ven 13

this.GetType()获取当前实例的多态类型,它实际上可能是您正在调用的类的子类this.GetType(),并且该子类可能位于不同的程序集中.

考虑以下:

AssemblyA.dll:

public class Foo
{
    public void PrintAssembly()
    {
        Console.WriteLine(this.GetType().Assembly.GetName());
        Console.WriteLine(Assembly.GetExecutingAssembly().GetName());
    }
}
Run Code Online (Sandbox Code Playgroud)

AssemblyB.dll:

public class Bar : Foo
{
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您运行以下代码:

Bar b = new Bar();
b.PrintAssembly();
Run Code Online (Sandbox Code Playgroud)

两种确定装配方式的结果将一样; this.GetType().Assembly将返回AssemblyB(因为实际的类型thisBar),而Assembly.GetExecutingAssembly()返回AssemblyA,因为那是包含该Foo.PrintAssembly()方法的程序集.

只有当包含调用的类型this.GetType()被密封时,才能确定它们引用相同的程序集.