atm Im只是在“玩” C#可以做的事情-只是知道它是如何工作的。 现在,我有了在运行时从dll加载类的想法,该类从我的原始程序扩展了一个类。示例:
// My class in the dll.
namespace MyDll
{
public class MyClassInDll : MyClass
{
public MyClassInDll(int num) : base(num)
{
// May contain more code :)
}
}
}
// My abstract class which is inherited in the dll.
namespace MyProgram
{
public class MyClass
{
private int num;
public MyClass(int numToUse)
{
num = numToUse;
}
public void WriteTheNumber()
{
Console.WriteLine(num);
}
}
}
// My mainfile.
namespace MyProgram
{
public class Program
{
public void Main(String[] args)
{
// Load the DLL
Assembly dll = Assembly.LoadFile("myDll.dll");
// Create an instance of MyClassInDll stored as MyClass.
MyClass myclass = ? // I dont know what to enter here :(
// Call the function my program knows from MyClass
myclass.WriteTheNumber(); // this should write the in the constructor passed integer to the console.
}
}
}
这是我的问题:
我真的希望您能为我提供帮助,我在Google上发现的所有内容都是关于在外部dll中的类中运行单个方法(或者我太愚蠢而看不到答案),但是对继承类一无所知。 / p>
谢谢!
答案 0 :(得分:1)
首先,您定义MyClass
的方法不是抽象的,如果您需要将其作为抽象类,则需要添加abstract修饰符关键字,因此请记住,我将像{ {1}}是一个具体的课程
最重要:创建实例需要在那做些什么? (构造函数需要传递一个参数)
是的,MyClass的构造函数需要一个参数和精确的整数,因此您需要编写如下内容:
MyClass
我如何检查它是否成功(或者更好的是哪些例外 是什么意思?)
如果您说从加载dll来说,我可以告诉您,有一种更好的方法可以将dll添加到您的项目中,将其添加为参考https://docs.microsoft.com/en-us/visualstudio/ide/managing-references-in-a-project?view=vs-2019
什么(其他)可能会出错(找不到dll,dll不包含 类,dll中的类不会扩展MyClass,MyClassInDll具有 与假设的构造函数不同,MyClass具有不同的方法, 属性,而不是dll中使用的MyClass版本) 我有什么可以做的吗?
您不能拥有两个具有不同方法和属性的MyClass,您只能拥有一个,并且要从两个项目(您的dll和您的主方法)中使用一个。
方法调用是否在dll中使用最终重写的方法? (可以 但我不确定)
仅当您将方法标记为虚拟方法时,您才能覆盖方法,但是我认为这个问题是因为您使用的是2个MyClass类,正如我之前所说的那样,这是一个错误。
我希望与此有关,我已经很清楚了,但是如果您需要进一步的帮助,请发表评论。