装了VS2005 SP1,测了些原来测的东西

之前学C#时写过个测试,看看readonly的行为到底如何。结果让我挖到了VS2005/.NET Framework 2.0里C#编译器的一个bug:readonly的值类型常量的值在运行时能被改变。
今天因为需要装了VS2005 SP1,突然想起这东西,于是重新写了个来测试:
public sealed class TestReadonly
{
static readonly MutableInt32 ZERO = new MutableInt32( 0 );

public static void Main( string[ ] args ) {
ZERO.increment( ); // no effect
System.Console.WriteLine( ZERO.Value ); // 0
++ZERO; // bad. changed value of readonly constant
System.Console.WriteLine( ZERO.Value ); // 1
}
}

struct MutableInt32
{
private int m_value;

public MutableInt32( int i ) {
this.m_value = i;
}

public int Value {
get { return this.m_value; }
set { this.m_value = value; }
}

public void increment( ) {
++m_value;
}

public static MutableInt32 operator ++( MutableInt32 m ) {
m.increment( );
return m;
}
}

结果让人挺失望了。我原本以为这个问题是在SP1的时候解决的,看来不是……
[quote]E:\>peverify TestReadonly.exe

Microsoft (R) .NET Framework PE Verifier. Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.

[IL]: 错误: [E:\TestReadonly.exe : TestReadonly::Main][偏移量 0x0000002C] 无法在
initonly 字段的 .ctor 之外对其进行更改。
1 Error Verifying TestReadonly.exe[/quote]

不过没关系,至少这个bug在VS2008/.NET Framework 3.5里已经不存在了。

==============================================================

hmm,不过测试这些东西还是副产品,这次装上SP1主要是为了那个ASP.NET Web应用程序的模板。可是这玩意也真是够大的,还真的是装了4G的东西上来。于是我的C盘开始吃紧了……

顺手把ASP.NET AJAX 1.0也装上了,看看这次会不会用上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值