代码如下:
class Entry
{
public Entry next;
int data;
public Entry(Entry top,int data)
{
this.next=top;
this.data=data; }}
class test
{
private Entry top;
public void push(int data)
{
// new Entry(top,data); 代码1
// top=new Entry(top,data) 代码2
}}
请大家讨论下为什么代码1会抛出警告: 从未对test.top字段赋值,字段将保持默认值.
而代码2不会?
第一次push操作后, test类里面会包含两个Entry对象吧 ? 那产生的第1个对象是何时初始化的?
Entry类的构造函数已重写为带参数的构造函数, 那第一个Entry对象是如何使用无参构造函数初始化的?
class Entry
{
public Entry next;
int data;
public Entry(Entry top,int data)
{
this.next=top;
this.data=data; }}
class test
{
private Entry top;
public void push(int data)
{
// new Entry(top,data); 代码1
// top=new Entry(top,data) 代码2
}}
请大家讨论下为什么代码1会抛出警告: 从未对test.top字段赋值,字段将保持默认值.
而代码2不会?
第一次push操作后, test类里面会包含两个Entry对象吧 ? 那产生的第1个对象是何时初始化的?
Entry类的构造函数已重写为带参数的构造函数, 那第一个Entry对象是如何使用无参构造函数初始化的?
解决方案 »
- 还是关于数据库的问题
- 高人指点,如何实现sql server数据库部分数据导出
- Datagridview插入数据库
- StreamWriter碰到"\n"怎么办?
- 高分求解.RichTextBox每次添加了文本之后,已设置的选中文本的颜色会消失.
- Crystal Report的问题
- 用批复日期>= #"+dt1.Value.ToShortDateString ()+"# and 批复日期<= #"+ dt2.Value.ToShortDateString () +"# 查询Access数据库,为什么
- SqlServer 里链接数为100多,,,不知道 为什么....
- 请高手指教C# 批量解压缩文件gzip!
- c#是什么东东呢?
- 我想用c#开发控件(其中包含第三方控件),然后通过asp.net下载,让客户端使用。请问有没有相关的资料呢?
- |zyciis| 如何用C# 发送按下小键盘中的1 呢我用 SendKeys.Send(Keys.NumPad1); 不行 他参数是String形的
代码2实例化了一个Entry对象并将私有成员top指向了这个实例
相当于Entry top = new Entry(top,data);
而代码1
尽管也实例化了一个对象(这语法……有问题吧?没试)
但是并未将top指向这个实例,所以说提示未赋值吧
ps:怎么有点递归的感觉,晦涩啊,搅的头晕
简单的说是编译检测与运行时
top=new Entry(top,data) 代码2
有对top赋值(编译时的),而不是Entry(top)初次使用的没赋值检查(运行时的)-----个人理解
{
private Entry top; //未赋值
public void push(int data)
{
// new Entry(top,data); 代码1 //匿名对象...此处top作为参数由上可知未赋值...
// top=new Entry(top,data) 代码2 //不用解释了吧...
}
}你的问题在于...代码一片混乱...所以容易迷惑...
{
private Entry top;
public void push(int data)
{
} public Entry pop()
{
return top;
}} 你会得到同样的警告
2, 在构造函数中赋值public test()
{
top = null;
}3,使用之前top = null;
new Entry(top,data); 4,使用之后new Entry(top,data);
top = null;5,在其他方法中赋值
public void push(int data)
{
new Entry(top,data);
}
void f()
{
top = null;
}
总之,明确赋值之后就不会出现此警告.但这只是警告..不是错误.
不过看来是表述的关系,居然没有人回答到重点. 下面再重新描述下问题:using System;
namespace Acme.Collections
{
public class Stack
{
Entry top;
public void Push(object data) {
top = new Entry(top, data); //注意此处 代码1
}
public object Pop() {
if (top == null) throw new InvalidOperationException();
object result = top.data;
top = top.next;
return result;
}
class Entry
{
public Entry next;
public object data;
public Entry(Entry next, object data) {
this.next = next;
this.data = data;
}
}
}
}以上是C#语言规范中的示例代码, 大家注意代码1.
问题:
在第一次执行push操作后, Stack对象中会包括几个Entry对象? 这几个Entry对象产生的具体过程是怎样?