有一段时间以来,我一直试图解决为什么允许一些"食人族"类编译的原因.
在我继续之前,也许我应该解释一下我称之为"食人族"的课程.不确定我是刚刚发明了这个术语,还是已经存在了一段时间,或者即使我正确使用它,但现在这并不重要.
我基本上把食人族叫做一个消耗自己的类.换句话说,一个类的接口声明了自己类型的成员.例如:
class Foo
{
public Foo SomeFoo;
}
Run Code Online (Sandbox Code Playgroud)
如上所示,类Foo有一个类型为Foo(本身)的成员.
现在,我第一次看到这个(很久以前)我没有编译它的东西,但令我惊讶的是它确实编译了.我之所以没有编译的原因,是因为对我来说,这会尖叫某种类型的递归噩梦.
为了使事情进一步复杂化,我决定尝试同样的事情,但使类成为一个结构,如:
struct Foo
{
public Foo SomeFoo;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会编译,而是你得到错误:类型'Foo'的struct成员'Foo.SomeFoo'导致struct布局中的循环
对我来说,编译错误更有意义,没有错误,但我相信这种行为最合乎逻辑的解释,所以我想知道你们中是否有人可以解释这种行为.
谢谢.