黑马程序员技术交流社区

标题: 有关枚举的问题 [打印本页]

作者: czwanglei    时间: 2014-3-25 15:55
标题: 有关枚举的问题
                 大家介绍一下,枚举有没有访问修饰符?如果有,与类的修饰符范围一样吗?

作者: mdb    时间: 2014-3-25 16:03
有,与类的修饰符范围不一样,枚举默认是public的,如果写成其他的则编译不通过

作者: czwanglei    时间: 2014-3-25 16:08
本帖最后由 czwanglei 于 2014-3-25 21:14 编辑
mdb 发表于 2014-3-25 16:03
有,与类的修饰符范围不一样,枚举默认是public的,如果写成其他的则编译不通过
...

你这个有问题?
作者: 百川    时间: 2014-3-25 16:36
枚举是一种值类型,它的访问修饰符也可以是private。如果是private那么则表示它只在它的声明所在的部分是可见的。
作者: czwanglei    时间: 2014-3-25 17:39
本帖最后由 czwanglei 于 2014-3-25 21:15 编辑
百川 发表于 2014-3-25 16:36
枚举是一种值类型,它的访问修饰符也可以是private。如果是private那么则表示它只在它的声明所在的部分是可 ...

你只说了private着这种情况。。
作者: 百川    时间: 2014-3-25 18:15
本帖最后由 czwanglei 于 2014-3-25 21:19 编辑
czwanglei 发表于 2014-3-25 17:39

额,自己写的版本,不知道对不对:类内部调用版本:
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {        
  5.             Class1 myclass = new Class1(1);
  6.             Console.WriteLine(myclass.Gender);
  7.             Console.ReadKey();
  8.         }
  9.     }
  10.     class Class1
  11.     {
  12.         private enum myenum { 男, 女, 不男不女 }
  13.         private myenum gender;
  14.         public string Gender
  15.         {
  16.             get { return gender.ToString(); }
  17.         }
  18.         public Class1(int i)
  19.         {
  20.             switch (i)
  21.             {
  22.                 case 1: gender = myenum.男; break;
  23.                 case 2: gender = myenum.女; break;
  24.                 default: gender = myenum.不男不女; break;
  25.             }
  26.         }
  27.     }
复制代码

作者: 百川    时间: 2014-3-25 18:24
下面的版本更简单一些。直接声明在Program类中。
  1. class Program
  2.     {
  3.         private enum myenum { 男, 女, 不男不女 }
  4.         static void Main(string[] args)
  5.         {        
  6.             //Class1 myclass = new Class1(1);
  7.             //Console.WriteLine(myclass.Gender);
  8.             //Console.ReadKey();
  9.             myenum gender = myenum.男;
  10.             Console.WriteLine(gender);
  11.             Console.ReadKey();
  12.         }
  13.     }
复制代码

作者: czwanglei    时间: 2014-3-25 21:09
百川 发表于 2014-3-25 18:24
下面的版本更简单一些。直接声明在Program类中。

你试着去在不同的命名空间建立类能否实现吗?
作者: 百川    时间: 2014-3-25 21:27
本帖最后由 百川 于 2014-3-25 21:29 编辑

不同命名空间中不能声明在类里面,因为这样只能在类里面使用而不能在本命名空间内引用,更不要说其他命名空间了。
声明在不同命名空间中添加引用一样可以使用。好吧我只说了private。。。
  1. using random1;

  2. namespace random
  3. {
  4.     class Program
  5.     {
  6.         static void Main(string[] args)
  7.         {        
  8.             myenum gender = myenum.男;
  9.             Console.WriteLine(gender);
  10.             Console.ReadKey();
  11.         }
  12.     }
  13. }
  14. namespace random1
  15. {
  16.     private enum myenum { 男, 女, 不男不女 }
  17. }
复制代码


作者: mdb    时间: 2014-3-25 21:42
czwanglei 发表于 2014-3-25 16:08
你这个有问题?

回复的时候也觉得表达不够准确,如果enum是放在类外面的那么是会报错的,如果放在类内部,那么是不会报错,但是之前看了MSDN发觉说得还是不太清楚,http://msdn.microsoft.com/zh-cn/library/ba0a1yw2.aspx
作者: mdb    时间: 2014-3-25 21:57
百川 发表于 2014-3-25 21:27
不同命名空间中不能声明在类里面,因为这样只能在类里面使用而不能在本命名空间内引用,更不要说其他命名空 ...

这个问题确实值得讨论下,我照你的代码在我这里写编译不通过了,我用的是VS2008,有提示
错误        1        命名空间中定义的元素无法显式声明为 private、protected 或 protected internal        D:\My Documents\Visual Studio 2008\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs        1032        18        ConsoleApplication1





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2