![](/img/trans.png)
[英]How do I get access to getters and setters from a separate class to the main class(with downcasting in C#)
[英]Having a Main() routine in a separate file from a Class in C#
最近,我从使用gVIM编写的C ++扩展到使用Visual Studio Express编写的C#。 有人告诉我,我必须学习很多知识才能真正有效地使用C#,但这是我的问题:
在C ++中,编写类或数据类型时,我将为类定义和驱动程序提供单独的文件。 然后,我将#include
包含在驱动程序中以便使用它。 目前还不清楚如何在Visual Studio Express 2013中执行此操作,并且我查找的所有教程都在同一文件中包含类定义和Main()例程。
我的解决方案文件夹中目前只有两个文件:驱动程序p1.cs和类型definition / implementation targetInt.cs 。 允许p1.cs与targetInt.cs类型一起使用的最佳方法是什么? 它是否会由于成为同一解决方案的一部分而简单地获得访问权限? 如果是这样,我该如何避免类型定义中没有Main()例程?
这是解决方案的屏幕快照,以及尝试构建解决方案时遇到的错误。 尝试在p1.cs中声明一个targetInt
对象(指向已共享的命名空间)时,我没有得到任何错误。
http://i793.photobucket.com/albums/yy218/tombombodil/solution_zps6a743e2d.png
让我知道是否需要澄清任何事情。
您所写的问题归结为缺少共享名称空间的简单原因-因为targetInit
存在于单独的名称空间中,所以Program
需要using targetInit.cs
来访问targetInit
类型。 但是,它们可以由于在同一个项目中而彼此访问-一个解决方案可以包含多个项目,并且如果它们彼此不引用,则它们将无法访问彼此的类型。
通常,任何给定类的naemspace
实际上是它的文件夹路径,并且类名与文件名相同(在创建新的类文件时Visual Studio会为您提供)。
至于Main()
定义,您只需要其中之一,因为在程序开始时,系统只有一个入口可以跳转到该入口-在操作系统需要一个Main()
函数时,具有多个Main()
函数没有多大意义。明确的地方开始执行。
位于同一文件中的Main()
方法和类定义很方便,因此所有代码都可以一起读取-了解如何设置实际项目,尝试转到GitHub并创建两个开源项目。
确实不是很复杂,但是它与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
。 您不能做的就是在解决方案中浮动一个孤立的C#文件,并期望它能正常工作。
有两种方法可以直接在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类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.