枚举和类引用

时间:2015-02-08 09:04:19

标签: c# reference enums

我几天前开始从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的值没有变化。为什么不支持“按引用调用”行为?

0 个答案:

没有答案