2012-05-11 2 views
1

У меня есть класс под названием LetterRect с двумя полями типа LetterSquare. Например:C# объект состав

public class LetterRect : Microsoft.Xna.Framework.GameComponent 
{ 
    private LetterSquare square1;       
    private LetterSquare square2; 
    private long indentificationNumber; 
    ... other fields that are irrelevant to this question 
} 

Я хочу, чтобы иметь возможность получить ссылку на объект LetterRect через Square1 и square2. Мое первоначальное решение состояло в том, чтобы дать LetterRect и соответствующему квадрату 1 и квадрату2 тот же идентификационный номер с длинным целым числом. Однако есть ли способ доступа к LetterRect без идентификационного номера? Определенно нет отношения наследования, это композиция или отношения «есть-а». Если я правильно помню в Java, то есть понятие внутреннего класса, где внутренний класс может напрямую ссылаться на экземпляр класса, членом которого он является. Итак, есть ли лучший способ получить ссылку на объект LetterRect через square1 и square2?

Спасибо за помощь!

+1

Не могли бы вы просто добавить аргумент LetterRect в свой конструктор LetterSquare и передать его при инициализации квадратных объектов? Или используйте DependencyInjection, если хотите. –

+0

Как правило, неплохой дизайн для передачи родительского объекта ребенку. если ребенку требуется что-то от родителя (например, в каком-либо поле) передать именно эту конкретную информацию ребенку. Если у вас есть проблемы с этим, вы можете предоставить нам подробную информацию, чтобы мы могли вам помочь. – Servy

ответ

1

Попробуйте это;

public class LetterRect : Microsoft.Xna.Framework.GameComponent 
{ 
    private LetterSquare square1; 
    private LetterSquare square2; 
    public LetterRect() 
    { 
     square1 = new LetterSquare(this); 
     square2 = new LetterSquare(this); 
    } 
} 

public class LetterSquare 
{ 
    public LetterRect LetterRectProp { get; private set; } 
    public LetterSquare (LetterRect letterRect) 
    { 
     this.LetterRectProp = letterRect; 
    } 
} 
Смежные вопросы