c # защита родительских и дочерних свойств - PullRequest
1 голос
/ 24 января 2010

Вот два класса с отношением родитель / потомок (взято из Unity3D)

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

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

Так как только метод получения является общедоступным, как они могут установить значение поля Component gameObject? (В классе Component нет других методов, которые принимают GameObject)

Я спрашиваю об этом, потому что я использую тот же дизайн и хочу сделать сеттер приватным.

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 января 2010

Когда вы добавляете компонент в GameObject, скорее всего, существует внутренний установщик, который назначает родителя (GameObject) компонента. Так что в этом случае единственный способ установить GameObject компонента - добавить компонент в GameObject.

Можно сравнить с winForms, где, если вы добавляете дочерний элемент управления в коллекцию родительского элемента управления, родительский элемент дочернего элемента управления устанавливается для вас.

0 голосов
/ 24 января 2010

Это может иметь internal установщик, или может быть, что GameObject передается в конструктор и устанавливается там? Или он может использовать отражение, чтобы установить поле напрямую (или вызвать другой недоступный метод доступа), но я скорее сомневаюсь в этом.

...