1

所以我有一个包含枚举MyEnum的类ClassA和一个引用该类(不同项目)的类ClassB,所以在ClassB中我有一个

using ClassA;

子句,我可以使用类似的东西访问该枚举

MyEnum value = MyEnum.EnumValue;

现在在第三个项目中,我有我的 Windows 表单,它有一个像

using ClassB;

现在我可以在 ClassB 中添加什么来访问我的 windows 窗体上的枚举?它甚至可能吗?我想避免仅仅为了访问枚举而将 ClassA 添加到我的表单中。

这个想法是 ClassB 是我的表单和 ClassA 中的功能之间的一种管理器 - 但我想访问该枚举,因为它使许多任务更容易

4

4 回答 4

4

在这种情况下,合乎逻辑的事情是使枚举独立于ClassA并使其公开,以便它在您的整个解决方案中可用。

编辑

阅读评论后,如果您真的想避免更改ClassA,可以尝试创建第二个枚举并将一个值转换为另一个值。例如,在扩展方法中:

public enum EnumB
{
    // make it equivalent to enum in ClassA
}

public static EnumB ToEnumB(this EnumA enumAValue) 
{
    EnumB newValue = (EnumB)(int)enumAValue;
}
于 2012-04-13T10:50:36.317 回答
2

我想避免仅仅为了访问枚举而将 ClassA 添加到我的表单中

你不能。如果它是在所在的程序集中定义的,则必须引用该程序集。ClassA

如果您不是在谈论存在于不同程序集中的类,则可以将枚举放在自己的文件中并将其声明为public- 这将允许从代码中的任何位置访问它(这是枚举的正常做法)。


更新:

您可以创建一个包含共享对象的附加项目,例如公共枚举和接口,并在您的其他项目中引用它们。

于 2012-04-13T10:50:48.457 回答
1

Using子句只是避免每次需要引用其中定义的元素时编写命名空间(或在本例中为类)的快捷方式。

如果你不喜欢写作

ClassA.MyEnum..

你必须写

using ClassA;
.....
 My Enum....

这是从表单访问 ClassA.MyEnum 的方式。
无论如何,如果你不喜欢这个解决方案,你不能在另一个地方重新定义 Enum。
您可以创建另一个名为 ClassB.MyEnum 的枚举,然后将 ClassB.MyEnum 的任何值映射到 ClassA.MyEnum。这是该解决方法的示例,我不知道它是否有用。

public class ClassB
 {
  public enum MyEnum
    {
     MyValue1,
     MyValue2
     }

   public static MyEnum Convert (ClassA.MyEnum originalValue)
    {
     return (MyEnum)Enum.Parse (typeof (MyEnum), originalValue.ToString());
    }
 } 

我建议将 MyEnum 移到 ClassA 之外。

于 2012-04-13T11:01:02.553 回答
0

前几天我都对你投了赞成票,因为你的所有评论都帮助我找到了适合我的情况的最佳解决方案。

我最终遵循的解决方案是重构所有内容,以便我设法将需要枚举(或其他任何内容)的所有代码从 ClassA 获取到 ClassB 中,并让 ClassB 通过事件向我的主项目报告操作结果,以便我可以使用结果更新 UI。

我认为这最终是解决这个问题的最佳方法

于 2012-04-16T17:32:27.227 回答