c#里一个关于全局变量和局部变量的问题

danxuezx danxuezx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
WPF工程:
代码下载

此代码是学习自定义依赖属性的示例代码。
背景描述:

界面上有两个textbox,textbox1和textbox2
另外有一个具有依赖属性的类student。
student的Name属性和textBox1绑定,
textBox2和student绑定。

想实现的效果:在textBox1中输入内容textBox2会跟着变化。

下面是绑定部分的代码:
public partial class MainWindow : Window
{
Student stu; //------------------------------------ 1
public MainWindow()
{
InitializeComponent();

stu = new Student();
stu.SetBinding(Student.NameProperty, new Binding("Text") { Source = textBox1 });

textBox2.SetBinding(TextBox.TextProperty, new Binding("Name") { Source = stu});
}

}

上面这样写没有任何问题,但是上面这段代码标记1处 声明student类对象的这句Student stu;如果放到构造函数里面,如下:
public partial class MainWindow : Window
{

public MainWindow()
{
InitializeComponent();
Student stu; //------------------------------------ 1
stu = new Student();
stu.SetBinding(Student.NameProperty, new Binding("Text") { Source = textBox1 });

textBox2.SetBinding(TextBox.TextProperty, new Binding("Name") { Source = stu});
}

}


则出现了问题:
运行后在textBox1中输入内容,textBox2中得内容会有10个字符是跟着一起变的,其他的就不变了。截图如下:


目前分析:当Student stu;放到构造函数里面它就是局部变量,在构造函数走完之后它就不复存在了,这样的话在textBox1中输入内容textBox2中应该不会有任何内容才对。
然后我猜想是不是C#里内存自动回收机制搞的鬼?它过一会才把stu释放。如果是这样,那打开exe之后隔段时间再输入textBox2中应该不会有数据才对,但发现textbox2中还是有数据。

目前不知道是什么问题了,请大家帮忙分析一下~~

c#我接触不久,请大家多多指点。
...全文

相关推荐

评论 16
收藏 已收藏
分享
返回顶部
danxuezx
C# 111,128 成员 642,536 内容