我对这句话感到困惑:
ctrlID.Font.Size = FontUnit.Small;
但是FontUnit是System.Web.UI.WebControls下的结构
public struct FontUnit
{
...
public static readonly FontUnit Small;
...
}
因为结构是一个类,所以我们如何拥有一个以自身为对象的类A:
public class A{
public A a;
}
不是像创建需要无限内存的无穷无尽的对象链吗?
答案 0 :(得分:2)
该属性为static,因此它是Type的成员,而不是对象实例的成员。您无需构造Small
静态属性即可创建FontUnit
对象。
考虑一下:
public class Foo
{
public static Foo Default {get;}
static Foo()
{
Default = new Foo();
}
}
Default
仅在使用前的未知时间构造一次。
如果它不是静态的,则可以进入预期的行为。
public class Foo
{
public Foo Default {get; private set;}
public Foo()
{
Default = new Foo();
}
}
这将导致溢出,因为属性将继续实例化新的Foo
,这将产生新的Foo
,依此类推。
只要小心不要用相同的构造函数实例化一个类型,则当前正在实例化一个类型,而拥有其自身类型的成员的类型就不会有任何问题。