Существует ли практическая альтернатива наследованию структуры? (C#)

Я - написание кода, которое заполнит Margin, Padding и BorderThickness свойства классов в System.Windows.Documents пространство имен. Каждое из этих свойств принимает значение в форме a System.Windows.Thickness, который является структурой.

Однако я хочу связать некоторые дополнительные данные с каждым из этих присвоений свойства, которые могут впоследствии быть получены моим кодом. Если Thickness если бы класс были, то я наследовался бы этому и определил бы свойства в подклассе для хранения моих дополнительных элементов данных. Но так как это - структура, наследование не возможно.

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

Спасибо за Ваши идеи,

Tim

10
задан Oded 25 April 2010 в 11:06
поделиться

3 ответа

Нет хороших альтернатив.

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

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

Вот как вы могли бы это реализовать:

public class ThicknessEx
{
    public string ExtraData { get; set; }
    public Thickness Thickness { get; set; }

    public static implicit operator Thickness(ThicknessEx rhs)
    {
        return rhs.Thickness;
    }
}

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

9
ответ дан 4 December 2019 в 01:30
поделиться

Не могли бы вы сохранить словарь, где ключом является хэш-код структуры?

0
ответ дан 4 December 2019 в 01:30
поделиться

Вы можете использовать Attached Dependency Properties типа AugmentedThickness, а затем, когда они изменятся, обновить базовые свойства, для обновления которых они предназначены. Для этого требуется, чтобы весь доступ выполнялся с использованием ваших Attached Properties, поскольку простая установка свойства Thickness не будет использовать ваш AugmentedThickness. При необходимости вы также можете (хотя это может быть немного неприятно) прослушивать явные изменения свойств толщины (которые вы не инициировали) и принудительно возвращать их к значению, заданному вашим AugmentedThickness.

1
ответ дан 4 December 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: