Один из подходов состоит в том, чтобы иметь защищенный переопределяемый метод, а затем иметь общедоступный метод без переопределения, который вызывает переопределяемый. В любое время, когда возвращаемое значение для функции в производном классе должно измениться, переопределите переопределяемый метод, вызывающий новый переопределяемый метод, который возвращает более утонченный тип, а также затеняет более раннюю версию публичной функции той, которая использует новое переопределение. Если vb.net разрешил одному классу переопределять и теневать один и тот же элемент, все было бы намного чище, но этого не было.
Public Class CarFactory
Protected Overridable Function DerivedMakeCar() as Car
' make a car
End Function
Public Function MakeCar() as Car
Return DerivedMakeCar()
End Function
End Class
Public Class FordFactory
Inherits CarFactory
Protected Overrides Function DerivedMakeCar() As Car
Return DerivedMakeFord()
End Function
Protected Overridable Function DerivedMakeFord() As Ford
' Make a Ford
End Function
Public Shadows Function MakeCar() As Ford
Return DerivedMakeFord()
End Function
End Class
. В некоторых случаях проще альтернатива публичная переопределяемая функция MakeCar (), которая всегда возвращает объект типа Car
, но имеет форму FordFactory, которая также включает функцию MakeFord (), которая возвращает Ford.
Функция переопределенного MakeCar () будет NotOverridable
и просто вызовет MakeFord. В некотором смысле, последний подход может быть более чистым, но если существует общее соглашение об именах (например, фабрики имеют метод MakeProduct, который возвращает наиболее производный тип), может быть полезно использовать Shadows.
Каждый раз package-lock.json
изменения, npm ci
должны работать перед под управлением кодом. Принятие кода запускается с start
, npm сценарий, npm ci
может автоматически работать со следующим prestart
npm сценарий
{
"scripts": {
"prestart": "npx @olegjs/on-change --file package-lock.json npm ci"
}
}