C# 无参数构造无构造函数类(来自另一个程序集)
我有一个来自NuGet包的类:C# 无参数构造无构造函数类(来自另一个程序集),c#,class,inheritance,C#,Class,Inheritance,我有一个来自NuGet包的类: using System.Windows.Forms; namespace FMUtils.KeyboardHook { public class KeyboardHookEventArgs { public bool isRShiftPressed { get; } public bool isRWinPressed { get; } public bool isShiftPressed { ge
using System.Windows.Forms;
namespace FMUtils.KeyboardHook
{
public class KeyboardHookEventArgs
{
public bool isRShiftPressed { get; }
public bool isRWinPressed { get; }
public bool isShiftPressed { get; }
public bool isWinPressed { get; }
public Keys Key { get; }
public override string ToString();
}
}
它位于程序集中,然后由该程序集引用:
using System;
using System.Windows.Forms;
using FMUtils.KeyboardHook;
namespace SpeedyGonzales
{
public class MyClass
{
public MyClass()
{
var key = new KeyboardHookEventArgs();
}
}
}
这在编译时中断,导致以下错误:
“KeyboardHookEventArgs”不包含接受0的构造函数
论据
关于这个问题,我发现了几点:
这似乎是我的情况,但由于我的类没有继承任何内容,这意味着唯一的直接父级是。。对象对象是否没有无参数构造函数?请澄清。您的问题中显示的源代码与您的答案不匹配。
KeyboardHookEventArgs
类实际上包含一个接受参数的构造函数。此构造函数的签名如下所示:
internal KeyboardHookEventArgs(FMUtils.KeyboardHook.Hook.KBDLLHOOKSTRUCT lParam)
构造函数被标记为internal
,即它在包含声明的程序集外部不可见(这就是为什么您可能在Visual Studio中没有看到它)。因此,您不能直接在代码中创建类型为KeyboardHookEventArgs
的对象。这可能是该库的作者的意图(因为他显式地声明了内部构造函数)
方法是使用Hook
类来创建钩子。如您所见,类型为KeyboardHookEventArgs
的对象随后由Hook
类创建,并作为事件处理程序的参数传递给您的代码:
var KeyboardHook = new Hook("Global Action Hook");
KeyboardHook.KeyDownEvent += KeyDown;
// Also: KeyboardHook.KeyUpEvent += KeyUp;
private void KeyDown(KeyboardHookEventArgs e)
{
// handle keydown event here
// Such as by checking if e (KeyboardHookEventArgs) matches the key you're interested in
if (e.Key == Keys.F12 && e.isCtrlPressed)
{
// Do your magic...
}
}
public重写字符串ToString()代码>看起来不对劲-这真的可以编译吗?这是一个NuGet包。。用得很好。代码来自给定程序集的内部。为什么看起来不正确?类可能没有任何构造函数-在这种情况下,它将有一个默认的无参数构造函数。看起来你还没有展示完整的代码,这段代码甚至不应该编译。因为它没有主体-你可能从包中反编译了吗?我想你需要重新阅读这个包应该为你做什么。它似乎是用-ie设计的,您不应该试图构造该特定类的实例。