【发布时间】:2012-02-23 13:56:27
【问题描述】:
我有一个用 C# 编写的 DLL。在这个 DLL 中定义了一个类。 假设这个DLL的代码是:
namespace unloadableDLL
{
public class DivisionClass
{
public /*static*/ long Division(long x, long y)
{
// We deliberately do not use a try catch to catch divide by 0 exceptions
return (x / y);
}
}
}
现在,我想在测试程序中动态加载这个 DLL。我需要看看如果我在以下两种情况下除以零会发生什么: 1)DLL直接加载(不使用AppDomain) 2) DLL不是直接加载的,先创建一个AppDomain再加载DLL。
我是 C# 的新手,我的意思是我在不到 4 小时前开始使用 C#,但我有 C++ 背景。
我的问题是,在我的测试程序中,我需要实例化一个 DivisionClass 对象,但这个对象仅在 DLL 中声明。 => 已解决
我的测试程序是
class Program
{
[PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]
static void Main(string[] args)
{
// Load the DLL
Console.WriteLine("Attempting to load unloadableDLL");
Assembly a = Assembly.LoadFrom("./unloadableDLL.dll");
unloadableDLL.DivisionClass divisionObject = (unloadableDLL.DivisionClass)a.CreateInstance("unloadableDLL.DivisionClass");
long number = divisionObject.Division(8, 2);
Console.WriteLine(number);
}
}
我不知道是什么,但编译器一直告诉我静态成员 unloadableDLL.DivisionClass.Division(lon, long) 不能通过实例引用访问;改为使用类型名来限定它。
谢谢大家
【问题讨论】:
-
你的意思是调用 DivisionClass.Division(x, y) 实际上并没有实例化 DivisionClass,因为它是一个静态方法?
-
到目前为止您尝试过什么?请注意,您不需要创建实例,因为
Division是一个静态方法。 -
直接从您的项目参考中调用,例如
unloadableDLL.DivisionClass.Division(100,10)。由于它是静态方法,因此您不需要创建实例。 -
我认为他更大的问题是如何在没有明确项目引用其包含的 dll 的情况下使用静态类。
-
好的,我没有看到 Divison 是静态的。让我们认为它不是,代码现在是: