c#亲子财产保护

时间:2010-01-23 22:52:33

标签: c# parent-child encapsulation

以下是两个具有父/子关系的类(取自Unity3D)

public class GameObject
{
    ...
    public T AddComponent<T>() where T : Component;
    ...
}

public class Component
{
    ...
    public GameObject gameObject { get; }
    ...
}

由于只有getter是公共的,它们如何实现设置Component gameObject字段的值? (Component类中没有其他方法采用GameObject)

我问这个是因为我使用了同样的设计,我想让setter变得私密。

由于

2 个答案:

答案 0 :(得分:0)

它可能有一个internal setter,或者可能是GameObject被传递到构造函数并设置在那里?或者它可以使用反射直接设置字段(或调用其他不可用的访问器),但我对此表示怀疑。

答案 1 :(得分:0)

向GameObject添加组件时,很可能是内部setter分配组件的父组件(GameObject)。因此,在这种情况下,设置组件的GameObject的唯一方法是将组件添加到GameObject。

您可以与winForms进行比较,如果将子控件添加到父控件的控件集合中,则会为您设置子控件的父级。