C# 构造函数“CS1061”的c错误x不包含y的定义

C# 构造函数“CS1061”的c错误x不包含y的定义,c#,class,C#,Class,嘿,伙计们;这个类不会编译。我得到的错误是: “BLBGameBase.KeyEvent”不存在 包含“KeyEvent”的定义 没有扩展方法“KeyEvent” 接受类型为的第一个参数 找不到“BLBGameBase.KeyEvent” 您是否缺少using指令或 程序集引用 无论如何,对于调用this.KeyEventD或类似命令的三行,都会引发此错误。 我不理解这个错误,因为它认为没有方法接受KeyEvent的第一个参数,但我并没有试图用KeyEvent调用方法。。。谢谢。要从一个构造函数

嘿,伙计们;这个类不会编译。我得到的错误是:

“BLBGameBase.KeyEvent”不存在 包含“KeyEvent”的定义 没有扩展方法“KeyEvent” 接受类型为的第一个参数 找不到“BLBGameBase.KeyEvent” 您是否缺少using指令或 程序集引用

无论如何,对于调用this.KeyEventD或类似命令的三行,都会引发此错误。
我不理解这个错误,因为它认为没有方法接受KeyEvent的第一个参数,但我并没有试图用KeyEvent调用方法。。。谢谢。

要从一个构造函数调用另一个构造函数,请使用以下语法:

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);
        }
    }

就您的代码而言,它正在尝试调用一个名为KeyEvent的常规非构造函数方法。

要从一个构造函数调用另一个构造函数,请使用以下语法:

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);
        }
    }

就您的代码而言,它正在尝试调用一个名为KeyEvent的常规非构造函数方法。

您对this.KeyEventD的调用正在生成一个错误,因为您以非法方式调用该类自己的构造函数。为您的KeyEvent方法指定一个返回类型以不生成构造函数。

您对此的调用。KeyEventD正在生成错误,因为您以非法方式调用类自己的构造函数。为KeyEvent方法指定一个返回类型,使其不生成构造函数。

这不是调用其他构造函数的方式。您应该使用以下方法:

public KeyEvent(Keys[] keys, eventmethod D)
    : this(D)
{
    this.keys = keys;
}

这不是你调用其他构造函数的方式。您应该使用以下方法:

public KeyEvent(Keys[] keys, eventmethod D)
    : this(D)
{
    this.keys = keys;
}

如果要调用另一个构造函数,必须使用base关键字:

    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;
    }

如果要调用另一个构造函数,必须使用base关键字:

    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;
    }

正如Kent所说,您可以使用此链接构造函数来调用同一类中的另一个构造函数,或者使用以下语法来调用基clas构造函数

public KeyEvent(eventmethod D, object[] args)
    :this(D) {
    this.args = args;
}

注意,这意味着链式构造器在构造器主体的其余部分之前执行-在执行主体中的任何其他代码之后,不能进行链式构造器调用

我建议您有一个构造函数体,它实际上做了一些事情,并使所有其他构造函数直接或间接地链接到该构造函数:

ClassName(parameters) : base(args)
{
    // Body
}

我还建议将eventmethod类型和d参数重命名为更为传统的类型。

正如Kent所说,您可以使用此方法来调用同一类中的另一个构造函数,或者使用以下语法来调用基clas构造函数

public KeyEvent(eventmethod D, object[] args)
    :this(D) {
    this.args = args;
}

注意,这意味着链式构造器在构造器主体的其余部分之前执行-在执行主体中的任何其他代码之后,不能进行链式构造器调用

我建议您有一个构造函数体,它实际上做了一些事情,并使所有其他构造函数直接或间接地链接到该构造函数:

ClassName(parameters) : base(args)
{
    // Body
}

我还建议将eventmethod类型和d参数重命名为更为传统的类型。

您应该使用构造函数链接:

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;
}

您应该使用构造函数链接:

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;
}