Опять про видимость в C# (ЗАКРЫТО)
Теперь уже базовый класс не умеет работать с защищёнными конструкторами дочернихПрограммируй на Java. Там область видимости как раз треугольничком.

Теперь уже базовый класс не умеет работать с защищёнными конструкторами дочерних:вроде ты не должен этого хотеть
имхо, как то аморально чтобы базовый класс чтонить знал про своих ребенков
вместо этого есть всякие там паттерны, типа фабрик
вместо этого есть всякие там паттерны, типа фабрикТогда тоже придётся делать публичные конструкторы, а этого как-то не хочется.
Какой тогда смысл в protected-конструкторах, чем они отличаются от private?
Тогда тоже придётся делать публичные конструкторы, а этого как-то не хочется.в джаве для этого есть пакадж локал, в сишарп подобного нету?
есть. internal называется
в джаве для этого есть пакадж локал, в сишарп подобного нету?А плодить пространства имён на каждое дерево классов - хороший тон?
Кроме того, сейчас эта фабрика у меня сама по себе internal, видна только внутри пространства имён, и никто снаружи её позвать не может. Хочется ещё и чтобы конструкторы экземпляров классов, которые она создаёт, никому, кроме фабрики доступны не были.
Твой вариант такой возможности, насколько я понимаю, не даст. Если выносить фабрику и классы создаваемых ей экземпляров в отдельное пространство имён - фабрику сможет звать кто угодно.
А плодить пространства имён на каждое дерево классов - хороший тон?в джаве это нормуль
частенько даже 2 пространства имен плодятся: для интерфейсов и для реализаций
А что насчёт второго вопроса?
в джаве для этого есть интернал классы
public class Factory {
A getB {
return new B;
}
private static class B extends A{
....
}
}
если хочешь чтобы ктото другой все же мог, то делаешь пакадж локал
package a;
class A{}
interface AFactory{
A getB;
}
package a.impl;
interface AFactoryImpl implements AFactory{
@Override
A getB {return new B;}
}
class B{
B {}
}
в джаве для этого есть интернал классыТочно - о вложенных классах я и не подумал

Оставить комментарий
kruzer25
Теперь уже базовый класс не умеет работать с защищёнными конструкторами дочерних:В документации ничего не нашёл...