关于枚举的一个问题

hjl13960 2011-05-23 09:00:20

public class Cat
{
public static const int age=1;
}
public enum Dog
{
age=1
}

public class Test
{
static void T()
{
int c = Cat.age;
int d = (int)Dog.age;
}
}


很简单的一段代码,一个是引用类型一个是值类型。
分别获取age字段时,值类型的Dog.age反而要强制转换,而引用类型则不用。

请问朋友们说说,如果我要用一个对象存放一些不变的数据,是该在上面选择Dog呢还是Cat?

说下原因吧
...全文
177 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjl13960 2011-05-24
  • 打赏
  • 举报
回复
是的,多了个static
禁用F3 2011-05-23
  • 打赏
  • 举报
回复
楼主写错了吧.这样的不存在类型转换
remember_me 2011-05-23
  • 打赏
  • 举报
回复
如果标识某个变量的值在程序运行过程中不可变的话,建议使用readonly
remember_me 2011-05-23
  • 打赏
  • 举报
回复
楼主的代码是错误的。

const关键字修饰的常量,实际上被其修饰的变量已为静态,所以不允许再添加static访问修饰符。
hjl13960 2011-05-23
  • 打赏
  • 举报
回复
public static const int age=1
这个是错误的,不好意思。要吧静态变量去掉

其实我是想从堆栈上面理解的。
不过我现在也有所了解了,谢谢上面各位
636f6c696e 2011-05-23
  • 打赏
  • 举报
回复
鸡同鸭讲
[Quote=引用 4 楼 hjl13960 的回复:]
引用 3 楼 vrhero 的回复:

因为类型不同啊,去看书吧...

大哥啊,我知道类型不同了,所以是该转换了。
难道我是我题目的意思写的使您误会呢?
[/Quote]
liuchulong 2011-05-23
  • 打赏
  • 举报
回复
楼上可以试试使用readonly关键字
tnjun123456 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 hjl13960 的回复:]
C# code

public class Cat
{
public static const int age=1;
}
public enum Dog
{
age=1
}

public class Test
{
static void T()
……
[/Quote]


这个没理由http://msdn.microsoft.com/zh-cn/library/sbbt4032(v=VS.90).aspx

不过这个 public static const int age=1;倒是有点奇怪
kingdom_0 2011-05-23
  • 打赏
  • 举报
回复
cat里面的public static const int age=1,age定义为int类型
cat.age相当于一个类对象调用自己的属性
public enum Dog
{
age=1
}
对于上面的代码,Dog.age是Dog类型的,值为age,强制类型转化为int型的时候,值才是 1.

ghost5216 2011-05-23
  • 打赏
  • 举报
回复
用cat
PPMMOOT 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 hjl13960 的回复:]
C# code

public class Cat
{
public static const int age=1;
}
public enum Dog
{
age=1
}

public class Test
{
static void T()
……
[/Quote]cat里面的public static const int age=1,age定义为int类型
至于枚举里面的age可调试一下看看是什么类型
hjl13960 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vrhero 的回复:]

因为类型不同啊,去看书吧...
[/Quote]
大哥啊,我知道类型不同了,所以是该转换了。
难道我是我题目的意思写的使您误会呢?
vrhero 2011-05-23
  • 打赏
  • 举报
回复
因为类型不同啊,去看书吧...
hjl13960 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vrhero 的回复:]

1.你这问题跟引用类型值类型毫无关系...

2.你那个Cat.age根本就不存在类型转换...

结论,你的问题根本不成立...好好看书,打好基础...
[/Quote]

谢谢你的建议
,不过我有个问题,Cat肯定是不存在类型转换的,因为这个同为int,但是dog呢?
int d = (int)Dog.age;
vrhero 2011-05-23
  • 打赏
  • 举报
回复
1.你这问题跟引用类型值类型毫无关系...

2.你那个Cat.age根本就不存在类型转换...

结论,你的问题根本不成立...好好看书,打好基础...

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧