我是一个C#和 MS Visual Studio 的新手,我想使用在另一个文件中定义的C#类,但无法使其工作。
下面是program.cs
(为什么我不能重命名该文件?)
using System;
namespace TestCSharp2
{
class Program
{
static void Main(string[] args)
{
Class2 class2 = new Class2();
// here the IDE will complain that cant find namespace or balabala..
class2.setValue(10);
Console.WriteLine(class2.getValue().ToString());
Console.ReadKey();
}
}
}
下面是我想在Class2.cs
文件中使用的Class2
:
namespace TestCSharp2
{
class Class2
{
int i;
public void setValue(int i)
{
this.i = i;
}
public int getValue()
{
return this.i;
}
}
}
我应该#include
还是什么?use namespace
还不够吗?
当一些人问他们是否 * 在同一个程序集/同一个项目中 * 时,我假设他们是,因为下面是创建他们的过程:
- 使用 Console C# Project 模板创建新项目,则默认情况下创建
program.cs
。 - Class2.cs是使用[文件] -〉[新建] -〉[文件] -〉[C#类]创建的,并保存在
program.cs
所在的同一文件夹中。
老实说,我不知道他们是否在 * 同一个组件 * / * 同一个项目 *,但我猜他们是。
9条答案
按热度按时间kwvwclae1#
根据您的解释,您还没有将
Class2.cs
包含在项目中。您刚刚创建了所需的Class文件,但还没有将其包含在项目中。Class2.cs是使用[File] -〉[New] -〉[File] -〉[C# class]创建的,并保存在program.cs所在的同一文件夹中。
请执行以下操作来克服此问题,
只需在您的项目上
Right click
,然后-〉[添加] -〉[现有项目...]:选择Class2.cs
并按OK问题现在应该解决了。
此外,当使用此过程添加新类时,
项目上的
Right click
-〉[添加] -〉选择所需项目(例如A类、表单等)tvmytwxo2#
是的,我刚刚犯了同样的“noob”错误,发现了这个线程。事实上,我已经将类添加到了解决方案中,而不是项目中。所以它看起来像这样:
只是加上这个希望能对别人有所帮助。
htzpubme3#
如果我们能看到实际的 * 项目结构 *,这将对我们更有好处,因为类本身并没有说那么多。
假设两个.cs文件位于同一项目中(如果它们位于同一解决方案的不同项目中,则必须添加对包含Class2.cs的项目的引用),您可以单击代码中带红色下划线的
Class2
,然后按CTRL +。(句号),或者单击应该出现的蓝条。出现的第一个选项将自动添加相应的using
语句。如果没有这样的菜单,则它可能指示项目结构有问题或缺少引用。您可以尝试将
Class2
设置为public
,但听起来这在这里不成问题,因为默认情况下您所做的是internal class Class2
,因此如果Class2
和internal class Class2
位于同一个项目/程序集中,则Class2
应该是可访问的。如果您引用的是包含Class2
的不同程序集或项目,则必须将其设置为public
才能访问它。因为internal
类不能从其程序集外部访问。关于重命名:您可以在解决方案资源管理器中单击
Program.cs
并按F2对其进行重命名。然后,它将打开一个对话框窗口,询问您是否也应该重命名类Program
本身及其所有引用,这通常是您所希望的。或者,您可以只在声明中重命名类Program
,然后再次打开带有蓝色小条的菜单(或者,再一次,CTRL+.)并执行相同的操作,但是它不会自动相应地重命名实际的 file。**在问题编辑后编辑:**我从来没有用过你用过的这个选项,但是通过快速检查,我认为它确实不在同一个项目中。在向项目添加新类时,请执行以下操作:在解决方案资源管理器中,右键单击您创建的项目并选择[Add] -〉[Class]或[Add] -〉[New Item...],然后选择“Class”。这将自动使新类成为项目的一部分,从而成为程序集的一部分(程序集基本上是构建项目后的“最终产品”)。对我来说,创建新类也有Alt+Shift+C的快捷方式。
e4yzc0pl4#
在“class Class2”之前添加“Public”声明。
vmdwslir5#
根据你的例子,它们似乎都位于相同的命名空间中。我的结论是,它们都是同一个项目的一部分(如果你没有用相同的命名空间创建另一个项目),并且所有的类默认情况下都被定义为它们所定义的项目的内部,如果没有声明的话,因此我猜问题是你的文件没有包含在你的项目中。
您可以通过在解决方案资源管理器窗口中右键单击该文件来包含它=〉Include in project,如果您无法在解决方案资源管理器中的项目文件中看到该文件,请单击解决方案资源管理器的显示上层菜单按钮show all files(只需将鼠标光标悬停在该按钮上,您就会看到按钮的名称)。
只是为了了解基本知识:
如果文件驻留在不同的项目\程序集中,则必须对其进行定义,否则必须至少将其定义为内部或公共文件。
如果你的类是从那个类继承的,那么它也可以被保护。
uqzxnwby6#
我在这里也遇到了同样的问题。发现问题出在文件的高级属性上。有一个名为“编译操作”的选项(可能不是确切的单词,我正在翻译-我的VS是葡萄牙语)。
我的Class1.cs文件在那里作为“内容”,我只需要将其更改为“编译”,使其工作,并使类被同一项目中的其他文件识别。
rekjcdws7#
只需在两个不同的文件中创建两个项目,然后将其中一个文件的“Program.cs”重命名并复制,然后将其粘贴到另一个文件的Program.cs旁边,就这样。
dzhpxtsq8#
在您的项目中将有一个扩展名为
.csproj
的文件。双击它,在Visual Studio中打开该项目。否则,如果创建一个新类,它将不会与其他类链接。
ldioqlga9#
当你声明你的,变量你,可以用private,declaration
使用系统;私有Class类;