A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© czwanglei 金牌黑马   /  2014-3-25 15:55  /  1187 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                 大家介绍一下,枚举有没有访问修饰符?如果有,与类的修饰符范围一样吗?

10 个回复

倒序浏览
有,与类的修饰符范围不一样,枚举默认是public的,如果写成其他的则编译不通过
回复 使用道具 举报
本帖最后由 czwanglei 于 2014-3-25 21:14 编辑
mdb 发表于 2014-3-25 16:03
有,与类的修饰符范围不一样,枚举默认是public的,如果写成其他的则编译不通过
...

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

你只说了private着这种情况。。
回复 使用道具 举报
本帖最后由 czwanglei 于 2014-3-25 21:19 编辑

额,自己写的版本,不知道对不对:类内部调用版本:
  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.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
百川 中级黑马 2014-3-25 18:24:02
7#
下面的版本更简单一些。直接声明在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.     }
复制代码
回复 使用道具 举报
百川 发表于 2014-3-25 18:24
下面的版本更简单一些。直接声明在Program类中。

你试着去在不同的命名空间建立类能否实现吗?
回复 使用道具 举报
百川 中级黑马 2014-3-25 21:27:16
9#
本帖最后由 百川 于 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:07
10#

回复的时候也觉得表达不够准确,如果enum是放在类外面的那么是会报错的,如果放在类内部,那么是不会报错,但是之前看了MSDN发觉说得还是不太清楚,http://msdn.microsoft.com/zh-cn/library/ba0a1yw2.aspx
回复 使用道具 举报
mdb 中级黑马 2014-3-25 21:57:32
11#
百川 发表于 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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马