【发布时间】:2009-03-16 18:14:58
【问题描述】:
一段时间以来,我一直在试图弄清楚为什么允许编译某些“食人”类的原因。
在我继续之前,也许我应该解释一下我所说的“食人族”课程。不确定我是否刚刚发明了这个术语,或者它是否已经存在了一段时间,或者我是否正确使用它,但现在这并不重要。
我基本上将食人者类称为消耗自身的类。换句话说,一个类的接口声明了它自己类型的成员。例如:
class Foo
{
public Foo SomeFoo;
}
正如您在上面看到的,类 Foo 有一个 Foo 类型的成员(本身)。
现在,我第一次看到这个(很久以前)我没想到它会编译,但令我惊讶的是它确实编译了。我之所以不认为它会编译,是因为对我来说,这是一种递归的噩梦。
为了让事情更复杂一点,我决定尝试同样的方法,但将类设为结构体,例如:
struct Foo
{
public Foo SomeFoo;
}
不幸的是,这不会编译,而是会出现错误:'Foo' 类型的结构成员 'Foo.SomeFoo' 导致结构布局中出现循环
对我来说,编译错误比没有错误更有意义,但我确信对这种行为有一个合乎逻辑的解释,所以我想知道你们中是否有人可以解释这种行为。
谢谢。
【问题讨论】:
-
LOL 食人族类。这让我笑了:)
-
从来没有听说过它通常被称为食人族,但我更喜欢食人族。