Допустим, есть класс с неким свойством:
class C {
public int property { set; get; }
}
Хочу в другом классе прокинуть это свойство через член класса. Очевидное решение такое:
class D {
private C c = new C();
public int property {
set { c.property = value; }
get { return c.property; }
}
}
Есть ли какой-то упрощенный синтаксис для этого?
Условно:
public int property => c;
Может быть даже с возможностью менять уровень доступа, как это сделано для свойств по умолчанию (без явного поля для хранения состояния).
Такого делегирования нет.
Если нужно вытащить все свойства вложенного объекта, то у вас два пути:
Предоставить доступ к вложенному объекту напрямую через свойство. Контроль вы теряете, зато код будет чистым.
Унаследоваться от вложенного объекта. Часто это совершенно некорректно (следите за соблюдением отношения is-a), но с точки зрения языка вы получаете требуемое поведение. Контроля нет, архитектура сомнительная, зато сато самый краткий вариант.
Если нужно вытащить некоторые свойства, при этом всё остальное важно скрыть, то есть следующие варианты:
Не полениться и сделать всё вручную. Упрощённый синтаксис из C# 7 вам уже подсказали. Этот подход даёт максимальный контроль над безопасностью и архитектурой, но этот вариант самый многословный.
Выделить необходимые свойства в интерфейс, реализовать его во вложенном объекте, предоставить наружу объект в виде интерфейса. Контроль достаточный (можно привести тип, но это уже на совести приводящего), архитектура и синтаксис разумные, чистота кода средненькая. Самый компромиссный вариант. Из минусов — требуется доступ к классу вложенного объекта, потому что extension everything до сих пор нет.
Класс можно написать вот так
class D
{
private C c = new C();
public int property
{
set => c.property = value;
get => c.property;
}
}
Вот такие выражения set => c.property = value;
называются Expression-bodied function members и появились в C# 6 версии.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как заставить прописанный мной объект для игры, создаваться только после нажатие игроком на кнопку 'Играть'Я не смог разобраться в instance, а opacity...
почему у меня выходит Stackoverflow exception, при попытке применения метода RotateLeft() для экземпляра класса BinarySearchTree А? Проблема именно в этом методе,...
Всем приветЕсть текст, как сделать так, чтобы он записался в List<List<string>>,где List<List<string>> - Предложение, а List<string> - Слова?
Подскажите, актуален ли сейчас WPF, как фреймворк для написания настольных приложений или есть что-то более стильное, модное и молодежное?