首页 新闻 搜索 专区 学院

winform的后置代码,没有对变量message进行初始化赋值,怎么可以进行赋值运算了,这不是会引发编译错误吗

0
悬赏园豆:50 [已解决问题] 解决于 2012-05-03 13:01

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进行初始化,应该引发错误无法编译生成窗体才对啊怎么会编译成功的!!!!

黑夜猫头鹰的主页 黑夜猫头鹰 | 初学一级 | 园豆:3
提问于:2012-05-02 12:43
< >
分享
最佳答案
0

message没有赋值会默认string.empty, label.Text 支持赋string.empty.

string str="",表示一个空串,被实列化了,占用了内存空间,   
string str=null,表示一个空引用,并没有指向任何地方,没有占用了空间,   
string str 或string.empty.因为C#里边你不初始化的话会有一个默认值。

收获园豆:20
悟行 | 专家六级 |园豆:12400 | 2012-05-02 13:50

那么,请问默认值是多少呢?

木兰香 | 园豆:252 (菜鸟二级) | 2012-05-03 09:21

@木兰香: string.empty

悟行 | 园豆:12400 (专家六级) | 2012-05-03 09:28

谢谢了,有事学会了一个小知识,原来VS中的机制是这样的:对于没赋值的变量都会分配一个empty值进行初始化,避免引发“未对变量进行初始化就就行赋值”错误,但通过运行后,会在监视窗口中给我提示,警告我们使用了,一些没有初始化的值(实际是初始化了,只不过是软件帮我们初始化),这就是为什么,我们能通过编译,当生成窗体后在监视窗口又有警告的原因

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-03 13:00
其他回答(3)
0

这样直接赋值的话,会因为label1没有初始化而出问题,一般的控件初始化都是在InitializeComponent()这个函数中进行的,你这样赋值其会早于初始化进行赋值,即时编译通过了,运行的时候也会报异常。

收获园豆:8
sinhbv | 园豆:2579 (老鸟四级) | 2012-05-02 13:47
0

因为你的message是public的,那么这个变量就存在外部赋值的可能。

在.NET中,变量未赋值的时候都有默认值(可以通过default(type)设置,字符串默认是null)。只是,.NET中,为了安全起见(.NET的设计中就有这个要求),所以,禁止对未赋值的变量直接进行使用。

收获园豆:10
无之无 | 园豆:5085 (大侠五级) | 2012-05-02 13:52

谢谢。我明白了

支持(0) 反对(0) 黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-03 13:00
0

只有 一個方法中的變量,如果沒有賦值,會檢核的。如果是全局的,或則是局部的。系統真不知道在哪個方法中已經賦值了。因此不會報錯,只有一個友好的提示。只有再運行的時候,賦值的時候才知道,是否賦過值。

收获园豆:10
無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-02 16:35

谢谢了

支持(0) 反对(0) 黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-05-03 13:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册