【问题标题】:How to use class from different project如何使用来自不同项目的类
【发布时间】:2014-05-05 09:52:01
【问题描述】:

IDE:VS 2010,C# .net,

我在 1 个解决方案中有两个获胜项目,

ProjA 和 ProjB

现在 ProjA 包含 classA.cs

namespace ProjA
{
    class ClassA
    {
        public static int aValue = 5;
    }
}

同样的方式 ProjB 包含 ClassB.cs

namespace ProjB
{
    public class ClassB
    {
        public static int bValue = 10;  
    }
}

这里是 FormA.cs

using System;
using System.Windows.Forms;
using ProjB;

namespace ProjA
{
    public partial class FormA : Form
    {
        public FormA()
        {
            InitializeComponent();
        }

        private void FormA_Load(object sender, EventArgs e)
        {
            int va = ProjB.ClassB.bValue;; //Here getting error.???
        }
    }
}

错误:无法解析符号 ProjB

提示:这个问题与命名空间有关,我正在尝试从 ProjA 中的 FormA 访问 ProjB 中的 ClassB,这里 ProjA 和 ProjB 是同一解决方案中的 2 个 winforms 项目

---xxxx----------- 这个问题已经解决了。

但现在我想访问 FormB.cs 中的 ClassA.cs(正好与上述问题相反),

当我尝试相同的方式 ProjB(RighClick) -> 添加参考 -> ProjName(Tab) ProjA(Click)

我面临的新问题是它说无法添加它会产生循环依赖,请提出如何解决这个问题。

我想访问 ProjB 中的 ClassA.cs->FormB.cs 这里 FormB 在 ProjB 中

【问题讨论】:

  • 您是否在ProjA 中添加了对ProjB 的引用?
  • 您的代码应该可以使用ClassB.bValue;
  • 是的,我已经添加了您可以在使用 ProjB 发布的第三个代码块中看到
  • 创建第三个项目,您将在其中移动 ProjA 和 ProjB 的共享代码,并将该项目引用到 ProjA 和 ProjB。

标签: c# .net winforms


【解决方案1】:

您需要创建类的新实例或将其设为静态。 所以这个:

 namespace ProjB
{
public static class ClassB
{
  public static int bValue = 10;  
}

然后

int va = ClassB.bValue; 

int va = new ClassB().bValue; 

【讨论】:

  • @user3593678 将 B 类设为静态。
【解决方案2】:

ProjB 是命名空间,所以它不知道使用哪个类。如果他们在同一个解决方案(项目包)中,只需使用类名ClassB。(或ProjB.ClassB.bValue

如果您的项目不在同一个解决方案中,请转到项目 A,文件->添加->现有项目,然后添加 ProjB。

【讨论】:

  • 如果你使用 ProjB.ClassB.bValue 会发生什么?
【解决方案3】:

如果您正确引用了ProjB,您只需在ProjA 中插入classB

using System;
    using System.Windows.Forms;
    using ProjB;

    namespace ProjA
    {
         ProjB.ClassB classb=new ProjB.ClassB();
        public FormA()
        {
            InitializeComponent();
            ....
           classb.bValue=....//set desired valued
        }

        private void FormA_Load(object sender, EventArgs e)
        {

            int va =classb.bValue;
        }

【讨论】:

  • 我更新了问题,ClassB 不可访问,因为它在 ProjB 中,而 FormA 在 projA 中
【解决方案4】:

问题出在参考上,

我添加了参考

右键ProjA -> References -> Add Reference,然后我添加了ProjB。

问题解决了。 :-)

【讨论】:

    【解决方案5】:

    在你的视觉工作室中

    1-) 右键单击​​您的解决方案

    2-) 然后打开解决方案的属性..

    在属性页面的左侧,您会看到菜单..

    3-) 点击项目依赖

    在项目依赖的详细信息(页面右侧)

    4-) 从带有“项目”标签的下拉列表中选择您的项目 A

    5-) 在 DropDownList 检查(标记为选中)下的 ProjectB

    6-) 点击保存/ok

    你所做的这个操作会警告编译器:

    “当你开始构建ProjectA时,在构建/编译ProjectA之前先构建/编译ProjectB,然后继续构建ProjectA”

    或者用另一种说法 “亲爱的编译器! 当您使用我的 ProjectA 时,您将需要 My ProjectB 才能正常工作。 所以也请检查我的 ProjectB。

    最好的问候,你可爱的开发者“

    注意:永远不要相互循环引用(ProjectA 依赖于 ProjectB,ProjectB 依赖于 ProjectA)。这会导致编译代码的不定式递归错误..!

    Visual Representation of The VS2010-ProjectDependencies Box

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多