我有一个抽象类被编译成DLL(我们称之为BaseClass.dll
(,它是其他类继承的基础。这些其他类也被编译成DLL(让我们称之为InheritedClass.dll
(,它可以用作我的主应用程序的插件,它可以在每个插件中调用与抽象类强制它们实现的方法相同的方法。
然而,有一些功能对所有插件来说都是通用的,所以我更喜欢在基类中实现这些功能。这减少了冗余,也消除了编写插件的人在实现该功能时出错的可能性。
一个这样的例子是一段代码,它需要编译的DLL文件的名称。一种行之有效的方法可能是这样的:
public string GetName()
{
return System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}
问题是GetExecutingAssembly()
返回当前正在运行的代码的程序集,而不是已编译到其中的程序集。因此,如果我把上面的函数放在BaseClass中,它会返回(BaseClass.cs(,而不管它编译到的DLL的名称是什么。这意味着我必须把它放在InheritedClass中,而不能把它放到BaseClass中。如上所述,我想避免这种情况,因为我不想让插件的开发人员使用这些通用代码,也不想依赖这些第三方开发人员来完成任务。
这可能吗?有没有一种方法可以通过基类中的代码获得从这个基类继承的DLL的名称?
GetType
总是返回对象的实际类型,因此您可以使用它来找出实际类型,然后从那里追踪到程序集:
public string GetName()
{
return System.IO.Path.GetFileName(GetType().Assembly.CodeBase);
}
希望您稍后能为这个方法找到一个更好的名称。GetName
非常含糊。