using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 对话框
{
public partial class Form2 : Form
{
public string message;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
label.Text = message;
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
生成一个这样的窗体
(逐语句过程调试)监视窗口显示messagenullstring,这不是会引发编译错误吗,难道在 label.Text = message中的message跟public string message中的message变量时不同的,求解救
问题是他会生成窗体 ,如果是没有对message进行初始化,应该引发错误无法编译生成窗体才对啊怎么会编译成功的!!!!
message没有赋值会默认string.empty, label.Text 支持赋string.empty.
string str="",表示一个空串,被实列化了,占用了内存空间,
string str=null,表示一个空引用,并没有指向任何地方,没有占用了空间,
string str 或string.empty.因为C#里边你不初始化的话会有一个默认值。
那么,请问默认值是多少呢?
@木兰香: string.empty
谢谢了,有事学会了一个小知识,原来VS中的机制是这样的:对于没赋值的变量都会分配一个empty值进行初始化,避免引发“未对变量进行初始化就就行赋值”错误,但通过运行后,会在监视窗口中给我提示,警告我们使用了,一些没有初始化的值(实际是初始化了,只不过是软件帮我们初始化),这就是为什么,我们能通过编译,当生成窗体后在监视窗口又有警告的原因
这样直接赋值的话,会因为label1没有初始化而出问题,一般的控件初始化都是在InitializeComponent()这个函数中进行的,你这样赋值其会早于初始化进行赋值,即时编译通过了,运行的时候也会报异常。
因为你的message是public的,那么这个变量就存在外部赋值的可能。
在.NET中,变量未赋值的时候都有默认值(可以通过default(type)设置,字符串默认是null)。只是,.NET中,为了安全起见(.NET的设计中就有这个要求),所以,禁止对未赋值的变量直接进行使用。
谢谢。我明白了
只有 一個方法中的變量,如果沒有賦值,會檢核的。如果是全局的,或則是局部的。系統真不知道在哪個方法中已經賦值了。因此不會報錯,只有一個友好的提示。只有再運行的時候,賦值的時候才知道,是否賦過值。
谢谢了