银河

SKYIV STUDIO

  博客园 :: 首页 :: 博问 :: 闪存 :: :: :: 订阅 订阅 :: 管理 ::

猜猜看以下程序的输出是什么?

using System;
using System.Windows.Forms;

namespace Skyiv.Ben.Test
{
    
sealed class MainTest
    
{
        
static void Main()
        
{
            Label lblOut 
= new Label();
            lblOut.Text 
= null;
            Console.WriteLine(
"{0} {1}", lblOut.Text == null, lblOut.Text == "");
        }

    }

}

该程序的输出是: False True,而不是: True False。也就是说,你将一个null赋值给lblOut.Text,而lblOut.Text的值是""(即string.Empty),而不是null。lblOut.Text是一个属性,实际上,按C#语法,给属性赋值是调用它的set方法,而获取属性的值是调用它的get方法,这两者不必一致,也就是说,你给属性赋一个值,然后再读该属性的值,取到的值就有可能不是你刚刚赋给它的值了。编程时如不小心,就有可能出现BUG。我以前写程序时就出现过这样的错误:
lblOut.Text = GetAccount();
if (lblOut.Text == null) lblOut.Text = "无此账号";
结果这个if语句永远不会取真值。
posted on 2005-09-22 20:59  银河  阅读(3008)  评论(19编辑  收藏  举报