【发布时间】:2015-05-08 23:32:50
【问题描述】:
我正在尝试从 Visual Studio 社区 2013 中的另一个“引擎”项目更改我的“游戏”项目中 RichTextBox 中的文本,该项目已被“游戏”项目引用。我尝试访问的所有内容都不会通过 Intellisense 调出 RichTextBox,导致出现红线,并且“引擎”项目拒绝构建。
通过查看网站和 Google,我尝试将 RichTextBox 设为静态以及其他一些技巧,包括我自己想出的一个技巧——制作第三个项目并引用另外两个。一切都无济于事。
这应该是我现在拥有的代码的重要部分:
在 Game.cs 中,我有公开课:
namespace Game
{
public partial class Game : Form
{
... //All the code for the form
}
}
在 Game.Designer.cs 我有 RichTextBox 公开和静态:
namespace Game
{
partial class Game
{
... // All the other unimportant stuff
public static System.Windows.Forms.RichTextBox rtbMessages; //I've fixed the errors this caused in InitializeComponent() already
}
}
现在从我的“引擎”项目中,我将尝试这样的事情(简化但它显示了我正在尝试做的事情):
using Game;
nameSpace Engine
{
public class Monster
{
... // Properties, Constructor, etc.
public static bool IsDead(string name, int currentHP)
if (currentHP <= 0)
{
Game.rtbMessages.Text += String.Format("You have killed {0}.{1}", name, Environment.NewLine);
return true;
}
return false;
}
}
}
我现在只使用我能够在网上找到的基本教程学习 C# 和面向对象编程 3 周,但从我所学的内容来看,我真的不知道为什么这行不通.我尝试将“Engine”的引用添加回“Game”,但我收到一条错误消息,指出这会创建循环依赖,因为“Game”已经引用了“Engine”。
这甚至可能吗?我开始怀疑了。
编辑:我错误地假设“项目”只是 VS 用于命名空间的名称。问题不在于它们在不同的命名空间中,而是在不同的项目中。因此三振出局。
【问题讨论】:
-
“我已经修复了这在 InitializeComponent() 中引起的错误” - 你能指定这些错误是什么吗?通常,您永远不应更改
*.Designer.cs中的任何内容,因为该文件完全由所见即所得的设计师生成。 -
嗯很难从您的代码中分辨出来,但存在许多潜在问题。 1:你有游戏命名空间和游戏对象,这会混淆智能感知 2:你是从引擎引用游戏富文本框?只是从对象的命名我想 Game 是前端,它知道富文本框控件等,而 Engine 是你的逻辑层,它可能只知道字符串和整数等
-
“循环依赖”问题听起来好像您的
Engine和您的Game命名空间不仅仅是不同的命名空间,而是代码实际上位于不同的程序集/不同的项目中?如果是这样,你应该在你的问题中指出这一点。 -
这也是无效的
Game.rtbMessages += String.Format("You have killed {0}.{1}", name, Environment.NewLine);您正在尝试使用带有String类型和RichTextBox类型的+= 运算符应该是Game.rtbMessages.Text += String.Format("You have killed {0}.{1}", name, Environment.NewLine); -
1)
namespace只有一个作用:对类型和其他命名空间进行分组;它不会以任何方式影响类型之间成员的可访问性。 2) 请阅读stackoverflow.com/help/mcve 和stackoverflow.com/help/how-to-ask 以获取有关如何改进您的问题以使其有意义且可以回答的建议。
标签: c# winforms reference namespaces