我最近扩展到使用gVIM编写的C ++中使用Visual Studio Express编写的C#。我被告知我必须忘记很多东西才能真正有效地使用C#,但这是我的问题:
在C ++中编写类或数据类型时,我会为类定义和驱动程序提供单独的文件。然后我会#include
驱动程序中的类来使用它。在Visual Studio Express 2013中如何执行此操作并不是非常清楚,我查找的所有教程都在同一文件中具有类定义和Main()例程。
我目前在我的解决方案文件夹中只有两个文件:驱动程序 p1.cs 和类型定义/实现 targetInt.cs 。允许 p1.cs 使用 targetInt.cs 类型的最佳方法是什么?它是否只是通过成为同一解决方案的一部分而获得访问权限?如果是这样,我如何在我的类型定义中没有Main()例程?
以下是解决方案的屏幕截图以及我在尝试构建解决方案时遇到的错误。尝试在 p1.cs 中声明targetInt
对象时,我不会收到错误,该对象指向已经共享的命名空间。
http://i793.photobucket.com/albums/yy218/tombombodil/solution_zps6a743e2d.png
如果我需要澄清任何内容,请告诉我。
答案 0 :(得分:1)
您编写的问题可归结为简单缺少共享命名空间 - 因为targetInit
存在于单独的命名空间中,Program
需要using targetInit.cs
才能访问{{1} }类型。但是,它们可以通过位于相同的项目中相互访问 - 解决方案可以包含多个项目,如果它们不相互引用,则它们无法访问彼此的类型。
通常,任何给定类的targetInit
实际上是它的文件夹路径,并且类名与文件名相同(Visual Studio在您创建新类文件时为您执行此操作)。 / p>
对于naemspace
定义,您只需要其中一个,因为您只有一个入口点,系统可以在程序开始时跳转到 - 多个Main()
函数无法生成操作系统需要一个明确的位置才能开始执行。
位于同一文件中的Main()
方法和类定义非常方便,因此可以一起读取所有代码 - 了解实际项目的设置方式,尝试访问GitHub并分叉开源项目。
答案 1 :(得分:1)
它真的不是非常复杂,但它与C ++不同。所以如果你有一个看起来像这样的文件:
namespace MyNamespace
{
public class MyClass
{
//...stuff
}
}
然后你想要另一个带有Main
的文件(除了一个简单的项目之外,你还可以使用它),它看起来像这样:
using MyNamespace; // unless you use the same namespace for both
namespace SomeOtherNamespace
{
class Program
{
static void Main(string[] args)
{
var c = new MyClass();
// alternatively, without the using statement, you can just fully qualify
// your class name like so:
// var c = new MyNamespace.MyClass();
}
}
}
但请注意,文件需要在同一个项目中 。如果他们在不同的项目中,您仍然可以执行此操作,但您必须使用MyClass
向项目添加对Program
的引用。{{1}}。您可以做的只是让您的解决方案中存在一个孤立的C#文件并期望它能够正常工作。
答案 2 :(得分:0)
有两种方法可以直接在C#中使用另一个类:
1 - 将该类放在我的类的相同命名空间中(即使它们位于不同的文件中),此代码澄清了这一点:
//file TargetInt.cs
namespace MyNameSpace
{
class TargetInt
{
}
}
//file p1.cs
namespace MyNameSpace
{
class p1
{
static void Main(string[] args)
{
}
}
}
请注意,这两个类都在MyNameSpace命名空间中 2 - 如果另一个类包含在另一个名称空间中,您可以通过在文件的上半部分声明此语句来简单地使用它:
//file TargetInt.cs
namespace OtherNameSpace
{
class TargetInt
{
}
}
//file p1.cs
using OtherNameSpace;
namespace MyNameSpace
{
class p1
{
static void Main(string[] args)
{
}
}
}
使用using OtherNameSpace;
,您可以直接使用TargetInt类。