C#cross class enum visibility - 可能吗?

时间:2012-04-13 10:48:22

标签: c# class enums

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

using ClassA;

子句,我可以使用

之类的东西访问该枚举
MyEnum value = MyEnum.EnumValue;

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

这样的子句
using ClassB;

现在我可以将哪些内容添加到我的Windows窗体上的枚举中?它甚至可能吗?我想避免为了访问枚举而将ClassA添加到我的表单中。

我的想法是ClassB在我的表单和ClassA中的功能之间是一种管理器 - 但是我希望能够访问该枚举,因为它可以使很多任务变得更容易

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

  

我想避免为了访问枚举

而必须将ClassA添加到我的表单中

你做不到。如果在ClassA所在的程序集中已定义,则必须引用该程序集。

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


更新

您可以创建包含共享对象的其他项目,例如公共枚举和接口,以及在其他项目中的引用。

答案 2 :(得分: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之外。

答案 3 :(得分:0)

由于你所有的评论都帮助我为我的案子寻找最佳解决方案,所以我在前一天都对你赞不绝口。

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

我认为这最终解决了这个问题