2013-11-23 3 views
0

я следующий класссделать объект доступным для детей экземпляров только

public class Manager 
{ 
    public SharedObject sharedobj {get;set;} 
    public SomeObject someobj {get;set;} 
    public AnotherObject anotherobj {get;set;} 
    //... 
} 

я хочу sharedobj быть доступны только из любого экземпляра, который в Manager экземпляра класса

делает его статическим не является потому что у меня будет несколько экземпляров класса Manager, поэтому единственное, что на мой взгляд направляет sharedobj к конструкторам каждого объекта, который будет его использовать, мне было интересно, есть ли лучший способ достичь такой вещи, не имея ссылайтесь на sharedobj в каждом случае, d, чтобы использовать его.

другой способ я думал использует защищенное ключевое слово и сделать другие классы наследуют менеджер

ответ

1

protected (C# Reference):

Защищенная ключевое слово является модификатор доступа члена. Защищенный член доступен в пределах своего класса и экземпляров производного класса. Для сравнения защищенных с другими модификаторами доступа см. Раздел Уровни доступности.

Предполагается, что вы хотите, чтобы каждый из них имел свой собственный общий объект, к которому вы можете получить доступ, если у вас есть менеджер.


На стороне записки, вы можете также использовать Dependency Injection (a.k.a DI), чтобы сделать это. Вот самое простое, кратчайшее объяснение DI, которое я видел до сих пор: http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html.

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

+0

У каждого менеджера есть свое значение объекта SharedObject, а дочерние экземпляры выше должны использовать объект SharedObject, который не используется в экземпляре менеджера. – FPGA

+0

В этом случае измените 'public' на' protected' и только класс и дети смогут получить к нему доступ. – Noctis

1

Вам необходимо передать его каждому объекту, как вы писали. Либо в конструкторе, либо просто создайте сеттер в SomeObject и AnotherObject и используйте его. Я бы пошел с тем, что вы написали, и передал его через конструкторы.

На стороне, если ничего, кроме объектов в Менеджере, не следует использовать SharedObject, то он, вероятно, должен быть закрытым, а не публичным в классе Manager.

+0

, но проблема в том, что у меня есть около 19 экземпляров в менеджере, и я нахожу это тревожным, чтобы передать его каждому конструктору. – FPGA

+1

Используют ли все классы, которые используют SharedObject так же? Похоже, у вас должен быть суперкласс для них. Но я не думаю, что вы пройдете мимо ссылки. В конце концов вы можете составить список объектов, пропустить его и установить ссылку (если у них был тот же базовый класс). Но я думаю, что конструкторы могли бы пойти, если объекты «нуждаются» в sharedObject - потому что конструктор заставляет вас его устанавливать. –

+0

Да, они имеют один и тот же базовый класс, и теперь я отправляю ссылку на каждый конструктор, но почему бы просто не использовать защищенное ключевое слово? – FPGA

Смежные вопросы