Теперь, есть ли способ создать отношения HAS-A между классами C #, что мне хотелось бы знать - КАК?
Сделать так, чтобы один класс имелполе другого класса:
class Car
{
Engine engine;
}
У автомобиля есть двигатель.
Еще один любопытный вопрос: почему C # не поддерживает частное (и также защищенное) наследование?
У вас есть ящик в подвале.Вы никогда ни разу ничего не вкладывали в это.Кто-то спрашивает вас "почему эта коробка пуста?"Какой ответ вы можете дать, кроме того, что коробка пуста, потому что никто никогда не кладет в нее ничего?
C # не поддерживает частное или защищенное наследование, потому что никто никогда не реализовывал эту функцию и не отправлял еедля клиентов. Функции по умолчанию не реализованы, бесплатно.Не то чтобы мы начали C # с закрытого и защищенного наследования, а затем удалили их по какой-то веской причине.Эти функции никогда не были в первую очередь, и неудивительно, что они все еще не там.Функции сами по себе не растут.
Не поддерживает ли наследование нескольких реализаций действительную причину или любую другую?
Я не понимаю вопроса.
Запланировано ли частное (и защищенное) наследование для будущих версий C #?
Нет.
Будет ли поддерживаться частное (и защищенное) наследование в C #сделать язык лучше, чем сейчас?
Я так не думаю.
Одна из многих проблем с наследованием, которое мы обычно видим в ООП, заключается в том, что оно полностью объединяет отношения «это своего рода» семантическое с «повторным использованием деталей реализации» механизм отношения.Частное наследование частично решает эту проблему.
Есть небольшое количество ситуаций, в которых мне бы очень хотелось иметь частное наследование в C #;недавним примером было то, что у меня была структура данных, которую можно было построить в целом, но которую я не хотел показывать пользователям:
internal class FancyDataStructure<T> {...}
, но можно только сериализовать , когда TБыл int (по причинам, которые не имеют отношения к обсуждению.) Я хотел бы сказать:
public class SerializableThingy : private FancyDataStructure<int>
Вместо этого я просто сделал FancyDataStructure<T>
a вложенного типа из SerializableThingy
и использовал композицию, а не наследство.Для написания небольшого количества «слесарного» кода все получилось хорошо.
Не думаю, что добавление функции окупается;это добавляет сложности к языку в обмен на очень маленькую выгоду от избежания некоторых простых сантехнических налогов.
Будет ли поддержка частного (и защищенного) наследования в C # сделать его более широко используемым языком, чем онсейчас?
Как мог я или кто-либо еще в этом отношении, возможно, узнать ответ на этот вопрос?StackOverflow - это плохое место для того, чтобы задавать вопросы, которые требуют предсказания будущего на основе контрафакта.Мои предложения:
- Реализация версии C # с нужной вам функцией.Посмотрите, станет ли это популярным.Тогда вы узнаете.
- Найдите человека с экстрасенсорными способностями, который может предсказать, каким будет будущее , если бы сейчас все было иначе.Поскольку предсказания, основанные на контрфактуальности, согласно правилам дедуктивной логики автоматически верны , предсказания будут точными.