2010-01-23 10 views
1

Voici deux classes avec une relation parent/enfant (prise de Unity3D)C# protection de la propriété-enfant parent

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

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

Depuis que le getter est public, comment sont-ils Acheive pour définir la valeur de la composante gameobject champ ? (Il n'y a pas d'autres méthodes dans la classe Component qui prend un GameObject)

Je pose cette question parce que j'utilise le même type de design et je veux rendre le setter privé.

Merci

Répondre

0

Il pourrait avoir un poseur internal, ou il pourrait être que le GameObject est passé dans le constructeur et y mettre? Ou il pourrait utiliser la réflexion pour définir le champ directement (ou appeler un accesseur autrement indisponible), mais j'en doute plutôt.

+0

Je pensais aussi au constructeur, mais les métadonnées de classe ne contiennent qu'un constructeur par défaut. Vous devez avoir raison concernant le setter interne. Merci. – noon

0

Lorsque vous ajoutez un composant à la gameobject, il est très probablement un setter interne qui affecte le parent (gameobject) du composant. Dans ce cas, la seule façon de définir GameObject d'un composant est d'ajouter le composant à GameObject.

Vous pouvez comparer à WinForms où, si vous ajoutez un contrôle enfant à une collection de commande de contrôle parent, le parent du contrôle de l'enfant est défini pour vous.

+0

Il doit être interne en effet. Pour les contrôles dans winform, le setter de la propriété Parent est public: public Control Parent {get; ensemble; } Merci – noon