【问题标题】:How to access a static class in same namespace but another assembly?如何访问同一命名空间中的静态类但另一个程序集?
【发布时间】:2012-06-23 06:27:04
【问题描述】:

我正在使用 C# 中的 WPF 应用程序。我在静态类中定义了许多常量,如下所示:

项目1:

namespace MyCompany
{
   public static class Constants
   {
      public static int MY_CONSTANT = 123456;
   }
}

那么我需要做的就是在项目 1 中的任何地方访问我的常量:

int x = Constants.MY_CONSTANT;

现在我将另一个项目添加到同一个解决方案中,并使用相同的根命名空间:

项目 2

namespace MyCompany.MyControl
{
   class VideoControl
   {
      int x;
      x = Constants.MY_CONSTANT; //<-- doesn't work
      x = MyCompany.Constants.MY_CONSTANT; //<-- doesn't work either
   }
}

我只是想不出从第二个程序集中访问我的静态常量类的方法。我也无法添加对第一个程序集的引用,因为它会导致循环依赖(第二个项目程序集是第一个项目程序集使用的 WPF 控件)。

我正在尝试做的事情是否可能?目前我的解决方法是在构造函数中传递所有必需的常量,但我宁愿直接访问它们。

【问题讨论】:

  • 你需要一个引用——你需要解决你的循环依赖——也许将常量类移到其他程序集都可以引用的第三个程序集中。
  • 题外话:如果你想要一个常量,为什么不将它声明为常量public const int MY_CONSTANT = 123456;

标签: c# wpf namespaces


【解决方案1】:

您可以将所有静态常量从项目 1 移动到项目 2,因此,所有常量对项目 1 和项目 2 都是可见的; 我建议引入另一个项目(可能很常见),它可以帮助管理所有其他项目共享的所有东西。这是一个常见的基础设施项目。

【讨论】:

  • 我会接受引入第三个程序集作为答案。出于某种原因,我认为只要我在同一个命名空间中,我就不需要引用。
【解决方案2】:

您必须将项目 1 中的引用添加到项目 2,然后它应该可以正常工作。你需要一张图来说明如何做吗?

这是一个 MSDN 链接http://msdn.microsoft.com/en-us/library/wkze6zky.aspx

这是一个带图片的答案>Adding projects to a project in Visual Studio 2010

【讨论】:

  • 项目 1 是一个 WPF 项目,它在项目 2 中使用 WPF 控件,所以我很确定它已经引用了它。不幸的是,我的代码正在工作,所以直到明天我才能再次检查。到时会回复你的。
  • 好吧,当您无法检查时,要求我们帮助您解决问题有点奇怪 ;-)
  • 我一直在凭记忆工作,因为这个问题一直困扰着我。刚刚检查过,是的,项目 1 确实引用了项目 2。
  • 你需要参考的课程在哪里,因为另一位发帖人提到了它?您是否要进行循环引用?
  • 请记住,引用有点像单向管道,您可以将 from 引入引用的类,但不要创建循环。
【解决方案3】:

另一个答案很接近,但实际上正好相反:项目 2 需要对项目 1 的引用。然后代码应该编译。

编辑:

抱歉,我看到您已经考虑过这一点。是的,有人评论说通过引入第三个程序集来避免循环依赖问题。

【讨论】:

  • 对我来说,“项目 1”和“项目 2”之间的区别仅仅是方向性。如果他给出了诸如“AutoManufacturers”和“CarDealerships”之类的名称,我可能会更明确。请不要将一般的非定向名称混淆为暗示意图,而是寻找示例中固有的意图,例如显示从另一个项目中引用一个项目的链接问题。
  • 抱歉,这是我在 StackOverflow 上提出的第一个问题,我试图让代码尽可能通用,以便于解析。看来最后我砍的太多了。
  • 在不违反保密协议的情况下,您可以随意在未来进行高度明确的表达。
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 2023-04-01
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
相关资源
最近更新 更多