所以我有一个类ClassA,它包含一个枚举MyEnum,一个类ClassB引用该类(不同的项目),所以在ClassB中我有一个
using ClassA;
子句,我可以使用
之类的东西访问该枚举MyEnum value = MyEnum.EnumValue;
现在在第三个项目中我有我的Windows表单,它有一个像
这样的子句using ClassB;
现在我可以将哪些内容添加到我的Windows窗体上的枚举中?它甚至可能吗?我想避免为了访问枚举而将ClassA添加到我的表单中。
我的想法是ClassB在我的表单和ClassA中的功能之间是一种管理器 - 但是我希望能够访问该枚举,因为它可以使很多任务变得更容易
答案 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。
我认为这最终解决了这个问题