public class KeyEvent {
private Keys[] keys = null;
public delegate void eventmethod();
private eventmethod em;
private object[] args;
private bool thrown = false;
public bool repeat = true;
public bool isKey(Keys key) {
if (keys == null) return true;
foreach (Keys k in keys) {
if (key == k) return true;
}
return false;
}
public void ThrowEvent() {
if (!repeat && thrown) return;
em.DynamicInvoke(args);
this.thrown = true;
}
public KeyEvent(eventmethod D) {
em = D;
}
public KeyEvent(Keys[] keys, eventmethod D) {
this.keys = keys;
this.KeyEvent(D);
}
public KeyEvent(eventmethod D, object[] args) {
this.args = args;
this.KeyEvent(D);
}
public KeyEvent(Keys[] keys, eventmethod D, object[] args) {
this.args = args;
this.KeyEvent(keys, D);
}
}
嘿,伙计们;这个类不会编译。我得到的错误是:
'BLBGameBase.KeyEvent'没有 包含'KeyEvent'的定义 并没有扩展方法'KeyEvent' 接受第一个类型的参数 'BLBGameBase.KeyEvent'可以找到 (你错过了使用指令或 汇编参考?)
无论如何,对于调用“this.KeyEvent(D)”或类似行的三行,会抛出此错误。 我不明白错误,因为它认为没有方法接受“KeyEvent”的第一个参数,但我不是试图用KeyEvent调用方法......谢谢。
答案 0 :(得分:4)
要从另一个构建函数调用,请使用以下语法:
public KeyEvent(Keys[] keys, eventmethod D)
: this(D)
{
this.keys = keys;
}
正如您的代码所代表的那样,它正在尝试调用名为KeyEvent
的常规方法(非构造函数)。
答案 1 :(得分:1)
正如Kent所说,你使用this
(在同一个类中调用另一个构造函数)或base
(调用基类构造函数)链接构造函数,语法为
ClassName(parameters) : this(args)
{
// Body
}
或
ClassName(parameters) : base(args)
{
// Body
}
请注意,这意味着链接构造函数在构造函数体的其余部分之前执行 - 在执行任何其他代码之后,无法使链式构造函数调用体。
我建议你有一个构造函数体,它实际上做了一些事情,并使所有其他构造函数只是链接到那个(直接或间接):
public KeyEvent(eventmethod D) : this(null, D){
}
public KeyEvent(Keys[] keys, eventmethod D) : this(keys, D, null) {
}
public KeyEvent(eventmethod D, object[] args) : this(null, D, args) {
}
public KeyEvent(Keys[] keys, eventmethod D, object[] args) {
this.keys = keys;
this.args = args;
this.eventmethod = D;
}
(我还建议将eventmethod
类型和D
参数重命名为更常规。)
答案 2 :(得分:0)
你对this.KeyEvent(D)的调用正在生成错误,因为你以非法的方式调用了类自己的构造函数。为KeyEvent方法提供一个返回类型,以便不构造构造函数。
答案 3 :(得分:0)
这不是你如何称呼其他构造函数。你应该使用这样的方法:
public KeyEvent(eventmethod D)
: this(null, D, null)
{
}
public KeyEvent(Keys[] keys, eventmethod D)
: this(keys, D, null)
{
}
public KeyEvent(eventmethod D, object[] args)
: this(null, D, args)
{
}
public KeyEvent(Keys[] keys, eventmethod D, object[] args) {
this.args = args;
this.keys = keys;
em = D;
}
答案 4 :(得分:0)
如果要调用其他构造函数,则必须使用base关键字:
public KeyEvent(eventmethod D, object[] args)
:this(D) {
this.args = args;
}
答案 5 :(得分:0)
你应该使用构造函数链接:
public KeyEvent(eventmethod D) : this(null, D, null {
}
public KeyEvent(Keys[] keys, eventmethod D) : this(keys, D, null) {
}
public KeyEvent(eventmethod D, object[] args) : this(null, D, args) {
}
public KeyEvent(Keys[] keys, eventmethod D, object[] args) {
this.args = args;
this.keys = keys;
this.em = D;
}