我是C#的新手,所以请原谅这个愚蠢的问题。我正在玩一个简单的XNA游戏演示。我有一个结构,我想要几个类可用。它的定义如下:
PhotonType.cs
using System;
namespace ShipDemo
{
public struct PhotonType {
public Color tint;
}
}
在同一文件夹/命名空间中的另一个文件 Ship.cs 中,我引用了这个结构:
namespace ShipDemo {
public class Ship {
//...
private PhotonType photonType;
//...
public Ship(float x, float y, float ang, Boolean correctSound, PhotonType photonType) {
//...
}
}
这给了我对PhotonType的两个引用的编译错误。
错误1类型或命名空间名称 无法找到'PhotonType'(是 你错过了使用指令或 部件 引用?)
我在这里做错了什么?
////
此外,C#文档说
初始化一个错误 结构中的实例字段。
但是如果我想提供默认值呢?
我正在使用Visual Studio Ultimate 2010 Beta。
答案 0 :(得分:3)
同一个项目中的2个文件是?如果您的命名空间在两个项目之间拆分,则需要在另一个项目中引用包含PhotonType的项目。
我就是这样,我会质疑设计,因为通常我们不会在多个程序集中拆分相同的命名空间。
答案 1 :(得分:3)
您的假设不正确。停止做出假设。
Ship
和PhotonType
位于两个不同的程序集(即项目)中
Ship
的程序集引用包含PhotonType
的 PROJECT 。
PhotonType
dll的任何引用,并重新添加对其 PROJECT 的引用PhotonType
文件
PhotonType.cs
,然后选择“属性”Compile
Ship
和PhotonType
你可能在整个过程中做了一些奇怪的事情。如果没有看到你的项目,很难准确说出什么。如果这些都不起作用,我建议拉上你的项目并将其上传到某个地方。通过查看项目可能需要一分钟才能看出错误。
答案 2 :(得分:1)
您是否包含了包含PhotonType的命名空间?例如通过“使用”
using MyNamespace.MyLibThatContainsPhotonType;
答案 3 :(得分:1)
Re:你问题的最后一部分:如果你想要你的结构的默认值,我认为(某种程度上)标准方法是创建一个名为Default
的静态只读变量,它将被初始化为你想要的价值观。静态只读变量可以在类或结构的静态构造函数中初始化。
public struct PhotonType {
public static readonly PhotonType Default;
public Color tint;
static PhotonType() {
// from here on out, PhotonType values initialized to PhotonType.Default
// will have their tint set to Color.White
Default = new PhotonType();
Default.tint = Color.White;
}
}
然后要获得默认值,您只需执行此操作:
PhotonType pt = PhotonType.Default;
答案 4 :(得分:0)
提示位于您收到的错误消息中。
...缺少使用指令......
将using $Namespace$.ShipDemo
添加到您要在其中使用PhotonType类型的代码顶部。
修改强>
两个文件都在同一名称空间中。
在您的示例代码中,您在两个示例中都说过namespace ShipDemo ...
。假设您正在使用不同的文件,这将比它的价值更麻烦。
请尝试以下操作。
<强> PhotonType.cs 强>
using System;
namespace ShipUtils
{
public struct PhotonType
{
public Color tint;
}
}
<强> Ship.cs 强>
using ******.ShipUtils;
public class Ship
{
private PhotonType photonType;
public Ship(float x, float y, float ang, Boolean correctSound, PhotonType photonType)
}
答案 5 :(得分:0)
听起来像你需要
using ShipDemo;
位于Ship.cs文件的顶部。 或者确保Ship类包含在ShipDemo命名空间中:
namespace ShipDemo
{
public class Ship
{
//...
}
}
或者我们需要您发布更多代码供我们查看。
答案 6 :(得分:0)
如果是多目标XNA项目的这一部分(Windows / XBox / Zune)......如果是这样,其中一个文件可能不包含在项目中。如果不是这种情况,您可能需要仔细检查Build ACtion
的{{1}}是否设置为PhotonType.cs
(在您点击文件后,这是Compile
窗格中的一个在Properties
答案 7 :(得分:0)
虽然Dan对如何提供默认值有一个很好的解决方案,但事实是,如果你想提供默认值,那么你应该使用类而不是结构。
结构是一组没有“智能”的数据,而类是知道如何使用该数据的数据组。
听起来你想给我上课。