Я только что закончил читать раздел, посвященный элементам расширения в Руководстве по проектированию инфраструктуры, 2-е издание, написанное Кшиштофом Квалиной и Брэдом Абрамсом, и не нашел примера для этого.Мой вопрос касается суперкласса и подкласса в библиотеке F #, но я ожидаю, что ответ относится ко всем языкам .NET.
F # имеет два типа: супертип Expr
и подтип Expr<'a>
где последний является просто оберткой для типизированной версии первого.Эти типы используются для выражений в кавычках.
Если бы я хотел определить методы расширения для этих типов для их оценки, что было бы лучше:
- Делать как F # PowerPackвыполняет и определяет методы с разными именами
EvalUntyped() : Expr -> obj
в Expr
и Eval() : Expr<'a> -> 'a
в Expr<'a>
. - Сделайте что-то ближе к тому, что вы сделали бы, если бы вы владели типами и использовали одно и то же имя (гдеметод для супертипа можно рассматривать как виртуальный, а метод для подтипа можно рассматривать как переопределение супер-виртуального метода).то есть
Eval() : Expr -> obj
на Expr
и Eval() : Expr<'a> -> 'a
на Expr<'a>
.
Второй вариант мне кажется более правильным, но я бы хотел следовать любым рекомендациям по дизайну:есть какой-нибудь авторитетный приоритет для этого (предположим, что они ошиблись в PowerPack)?