我有一个编译成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的名称?
答案 0 :(得分:1)
GetType
总是返回对象的实际类型,因此你可以使用它来找出你实际的类型,然后从那里追逐到程序集:
public string GetName()
{
return System.IO.Path.GetFileName(GetType().Assembly.CodeBase);
}
希望您稍后会为此方法找到更好的名称。 GetName
非常模糊。