类的字段/属性与其自己的类型相同吗?

时间:2019-01-18 01:12:16

标签: c#

我对这句话感到困惑:

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;
}

不是像创建需要无限内存的无穷无尽的对象链吗?

1 个答案:

答案 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,依此类推。

只要小心不要用相同的构造函数实例化一个类型,则当前正在实例化一个类型,而拥有其自身类型的成员的类型就不会有任何问题。