积极答复者
为什么在类的定义中,其成员可以是自身的类型?

问题
-
以下代码编译可以,但是不能运行,不过如果允许这样定义一个类,那么不是一个逻辑漏洞吗?
using System.Windows;
namespace _DependencyProperty
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Fruit f = new Fruit("Fruit");
MessageBox.Show(f._fruit._fruit._fruit._name);
}
}
public class Fruit
{
public Fruit _fruit = new Fruit("_fruit");
public string _name;
public Fruit(string argName)
{
_name = argName;
}
}
}这个能编译还能运行,是不是在编译成IL的时候,把循环去掉了呀?
============================================================
using System.Windows;
namespace _DependencyProperty
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Fruit f1 = new Fruit("f1");
f1._fruit = f1;
f1._fruit._fruit._fruit._fruit._fruit.ShowName();
}
}
public class Fruit
{
public Fruit _fruit; //= new Fruit("_fruit");
public string _name;
public Fruit(string argName)
{
_name = argName;
}
public void ShowName()
{
MessageBox.Show(_name);
}
}
}
此去千万里,岁月忽已晚!
- 已编辑 思考的表情 2014年2月1日 13:13 补充
答案
-
类是允许你在内部直接引用自生作为一个类型的。但是不能调用构造函数。因为一旦调用(设想):
Fruit f = new Fruit();
调用构造函数,每次调用构造函数,都将出发新的f被创建出来,造成死循环。
但是如果:
Fruit f = null;
这个没有调用构造函数,自然不会构成死循环。你看,数据结构的链表不也是这样做的么?
ASP.NET Questions
Other Discussions
FreeRice Donate
Issues to report
Free Tech Books Search- 已标记为答案 思考的表情 2014年2月2日 17:17
全部回复
-
类是允许你在内部直接引用自生作为一个类型的。但是不能调用构造函数。因为一旦调用(设想):
Fruit f = new Fruit();
调用构造函数,每次调用构造函数,都将出发新的f被创建出来,造成死循环。
但是如果:
Fruit f = null;
这个没有调用构造函数,自然不会构成死循环。你看,数据结构的链表不也是这样做的么?
ASP.NET Questions
Other Discussions
FreeRice Donate
Issues to report
Free Tech Books Search- 已标记为答案 思考的表情 2014年2月2日 17:17