我几天前开始从Andrew Tolson的 Pro C#5.0和.NET 4.5 Framework,第6版开始学习C sharp,作为Java程序员,很多概念都贪污我在C sharp中键入概念
我正在读C sharp中的枚举,我看到了System的类型层次结构。基本上,作者已经说过枚举是从 System.ValueType 抽象类扩展而来的。由此我推断 enum 只不过是 ValueType 类的扩展。我还检查了IL的枚举,它是这样的:
.class private auto ansi sealed TestPrograms.EmpType
extends [mscorlib]System.Enum
{
} // end of class TestPrograms.EmpType
.field public static literal valuetype TestPrograms.EmpType Contractor = uint8(0x64)
//...and so on for other literals
以下枚举,
enum EmpType : byte
{
Manager = 10,
Grunt = 1,
Contractor = 100,
VicePresident = 9
}
现在就是这样 - 因为 EmpType 是 System.Enum 的类扩展,所以编写以下内容应该是一个类引用,
EmpType emp;
我的第一个问题如下:
为什么我们将此引用初始化为,
EmpType emp = EmpType.Contractor;
我的第二个问题是,如果我将此引用作为方法参数传递,则产生的行为是“按值调用”,即,如果我编写以下代码:
class EmpTypeTest
{
static void Main(string[] args)
{
Console.WriteLine("**** Fun with Enums *****");
EmpType emp = EmpType.Contractor;
AskForBonus(emp);
Console.WriteLine((byte)emp);
// Prints out "emp is a Contractor".
Console.WriteLine("emp is a {0}.", emp.ToString());
Console.ReadLine();
}
static void AskForBonus(EmpType e)
{
switch (e)
{
case EmpType.Manager:
Console.WriteLine("How about stock options instead?");
break;
case EmpType.Grunt:
Console.WriteLine("You have got to be kidding...");
break;
case EmpType.Contractor:
Console.WriteLine("You already get enough cash...");
e++;
Console.WriteLine((byte)e);
break;
case EmpType.VicePresident:
Console.WriteLine("VERY GOOD, Sir!");
break;
}
}
}
emp的值没有变化。为什么不支持“按引用调用”行为?