为什么构造函数在添加括号时转向方法?

时间:2015-11-24 22:01:31

标签: c# class constructor

我正在编写一个类,每当我开始编写构造函数时,文本变为蓝色表示它与类相关,但是,只要我为参数添加()括号,它就会变成黑色,就像它是正常的一样方法和编译器抱怨它需要一个返回类型。

以下是主要表格:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Kat 
{
public partial class Form1 : Form
{
    Cat[] catArray = new Cat[7];

    catArray[0] = new Cat("Tom", "Tiger", "India", 'm', 10);
    Cat tiger2 = new Cat("Kyle", "Tiger", "India", 'm', 4);


    public Form1()
    {
        InitializeComponent();
    }
}
}

这是班级:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Kat
{
class Cat
{
    private string _name, _species, _country;
    private char _gender;
    private int _age;

    public Cat(string name, string species, string country, char gender, int age)
    {
        _name = name;
        _species = species;
        _country = country;
        _gender = gender;
        _age = age;
    }
}
}

它肯定不起作用,因为我不能用它来构造一个对象。这是我的IDE的精确副本,它位于主类的命名空间中。

主类中的错误是: “错误3方法必须具有返回类型” 和 “错误1数组大小无法在变量声明中指定(尝试使用'new'表达式初始化)” 和 “错误8'Kat.Form1.catArray'是'字段',但用作'类型'” 和 “错误10找不到类型或命名空间名称'tiger1'(您是否缺少using指令或程序集引用?)”

有更多错误,但它们或多或少重复。

如果您创建传统的“Cat tiger1 = ...”,对象似乎会实例化,但是当您尝试将其放入数组时,错误确实会出现。

2 个答案:

答案 0 :(得分:4)

您在方法之外有非初始化代码:

public partial class Form1 : Form
{
    Cat[] catArray = new Cat[7];

    catArray[0] = new Cat("Tom", "Tiger", "India", 'm', 10);  // not legal
    Cat tiger2 = new Cat("Kyle", "Tiger", "India", 'm', 4);


    public Form1()
    {
        InitializeComponent();
    }
}

将它放在表单的构造函数中:

public partial class Form1 : Form
{
    Cat[] catArray = new Cat[7];

    Cat tiger2 = new Cat("Kyle", "Tiger", "India", 'm', 4);


    public Form1()
    {
        catArray[0] = new Cat("Tom", "Tiger", "India", 'm', 10);
        InitializeComponent();
    }
}

编译器用于解析代码的算法正在绊倒我的无效语法,无法准确描述真正的问题。

答案 1 :(得分:1)

请注意以下事项:

  1. 构造函数 必须与封闭类(struct)具有完全相同的名称,并且不能具有返回类型。
  2. 方法 必须具有与类(struct)名称不同的名称,并且必须包含返回类型(可以是{{1或者普通类型)。
  3. 如果您尝试在上面的1.和2.之间进行混合,则会出现编译时错误。

    当您开始输入时:

    void

    开发环境(Visual Studio)会认为public Cat 是方法,属性或字段的类型。当您继续使用该空间和该成员的名称时会发生这种情况。而是继续使用左括号:

    Cat

    开发环境意识到这必须是构造函数(没有类型,只是成员名称),因此它会更改为成员使用的颜色,而不是用于 types 成员的颜色

    我现在在你的问题中看到更多细节。你有:

    public Cat(
    

    这两行中的最后一行是非法的。你不能直接在类这样的类中输入数组。考虑将其移动到构造函数体:public partial class Form1 : Form { Cat[] catArray = new Cat[7]; catArray[0] = new Cat("Tom", "Tiger", "India", 'm', 10);