C# 为什么在添加括号时构造函数转向方法?
我正在编写一个类,每当我开始编写构造函数时,文本都会变为蓝色,表示它正在关联该类。然而,当我为参数添加()括号时,它会变为黑色,好像它是一个普通方法,编译器会抱怨它需要返回类型 以下是主要形式:C# 为什么在添加括号时构造函数转向方法?,c#,class,constructor,C#,Class,Constructor,我正在编写一个类,每当我开始编写构造函数时,文本都会变为蓝色,表示它正在关联该类。然而,当我为参数添加()括号时,它会变为黑色,好像它是一个普通方法,编译器会抱怨它需要返回类型 以下是主要形式: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Te
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无法在变量声明中指定数组大小(请尝试使用‘新’表达式初始化)”
和
“错误8‘Kat.Form1.catArray’是一个‘字段’,但与‘类型’一样使用”
和
“错误10找不到类型或命名空间名称‘tiger1’(是否缺少using指令或程序集引用?)
有更多的错误,但它们或多或少是重复的
如果您使用传统的“Cat tiger1=…”创建对象,则该对象似乎会实例化,但当您尝试将其放入数组时,会出现错误。请注意以下几点:
void
或普通类型)public Cat
开发环境(Visual Studio)会认为Cat
是方法、属性或字段的类型。如果继续使用空格和该成员的名称,则会发生这种情况。如果改为使用左括号继续:
public Cat(
开发环境意识到这必须是一个构造函数(没有类型,只有成员名),因此它将更改为用于成员的颜色,而不是用于成员类型的颜色
我现在在你的问题中看到了更多细节。你有:
public partial class Form1 : Form
{
Cat[] catArray = new Cat[7];
catArray[0] = new Cat("Tom", "Tiger", "India", 'm', 10);
这两行中的最后一行是非法的。这样的类中不能直接有数组项赋值。考虑将其移动到构造函数体:<代码>公共窗体({ CARTARSARS(0)=…} /代码> < P>注意:
void
或普通类型)public Cat
开发环境(Visual Studio)会认为Cat
是方法、属性或字段的类型。如果继续使用空格和该成员的名称,则会发生这种情况。如果改为使用左括号继续:
public Cat(
开发环境意识到这必须是一个构造函数(没有类型,只有成员名),因此它将更改为用于成员的颜色,而不是用于成员类型的颜色
我现在在你的问题中看到了更多细节。你有:
public partial class Form1 : Form
{
Cat[] catArray = new Cat[7];
catArray[0] = new Cat("Tom", "Tiger", "India", 'm', 10);
这两行中的最后一行是非法的。这样的类中不能直接有数组项赋值。考虑将其移动到构造函数体:<代码>公共窗体({CasAldS[0)=…} <代码> < /p> < p>您在方法之外有非初始化代码:
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();
}
}
编译器用于解析代码的算法由于语法无效而出错,无法准确描述真正的问题所在。方法之外有非初始化代码:
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();
}
}
编译器用于解析代码的算法由于语法无效而出错,无法准确描述真正的问题所在。确切的错误消息是什么?它对我来说很好,但我要补充的是,默认的空构造函数是多余的,除非您还指定了带参数的构造函数。您是否遇到编译错误?如果代码未编译,请尝试重新启动VS,有时会出现错误,快速重新启动会将其唤醒。请确保代码中的拼写和大小写相同,我假设您上面的代码不是IDE的复制/粘贴。它在命名空间中吗?确切的错误消息是什么?它对我来说很好,但我要补充的是,默认的空构造函数是多余的,除非您还指定了带参数的构造函数。您是否遇到编译错误?如果代码未编译,请尝试重新启动VS,有时会出现错误,快速重新启动会将其唤醒。请确保代码中的拼写和大小写相同,我假设您上面的代码不是IDE的副本/粘贴。它是否在命名空间中?这如何回答问题?为什么这会被提升?@SethKitchen我没想到他在班级成员级别上有
catArray[0]=…
的东西。我加了一句话,但D斯坦利更快。可能是因为我解释了键入(
)时文本颜色变化的部分,所以我被提升了。这是如何回答问题的?为什么会被提升?@SethKitchen我没想到他有混乱[0]=…
类成员级别的东西。我添加了一条注释,但是D Stanley更快。可能我被提升了,因为我解释了关于键入时文本颜色变化的部分(
)。