Вы можете использовать как явное, так и неявное управление скоростью в Simulink.
get_param (bdroot, 'FixedStep')
set_param (bdroot, 'FixedStep', '0.005')% 200 Гц
blockquote> blockquote>
Цвета Чтобы активировать цвета времени выборки, перейдите по ссылке: Дисплей> Время выборки> Все. Легенда о времени выборки поможет вам понять, как работает неявный контроль скорости.
Параметр времени выборки Вы можете управлять параметрами задания и времени выборки через: Параметры конфигурации> Солвер> Задачи и параметры времени выборки.
В начале вы можете активировать автоматическую обработку изменения скорости передачи данных. Затем вы проанализируете, какие цвета имеют ваши элементы модели, и поместите блоки Rate-Transition на сигнальные линии данных между элементами модели с разными частотами дискретизации.
Теперь контроль скорости неявный. Если вы используете вызовы функций для явного вызова ваших подсистем с требуемой скоростью, используя предопределенный планировщик, тогда контроль скорости будет явным.
Вы можете открыть сборку в примерах Simulink, чтобы увидеть, как она работает:
sf_ladder_logic_scheduler
sf_loop_scheduler
blockquote> blockquote>
Есть решение, но оно уродливое: используйте отражение, чтобы получить базовый- class, а затем испустить IL, необходимый для его вызова. Посмотрите это сообщение в блоге , в котором показано, как это сделать. Я успешно использовал этот подход для вызова реализации метода базовым классом, когда все, что у меня есть, - это ссылка на производный класс, который переопределяет этот метод.
Назвать MyBase. DoMe () от внешнего класса, Вам были бы нужны или экземпляр MyBase или в полученный экземпляр, который не переопределяет DoMe (). Метод, объявленный как виртуальное, назовут на фактическом типе выполнения объекта, не типе объекта, который является, почему кастинг к MyBase не изменяет то, какой метод называют. Если бы однако метод не был объявлен в MyBase как виртуальный, и MyDerived все еще реализовал DoMe (), то он "скрыл" бы реализацию MyBase. Поэтому, если бы ссылкой был MyDerived, то это назвало бы MyDerived. DoMe (), но в этом кастинге случая к MyBase myBase = (MyBase)myDerived и затем вызов myBase. DoMe () назвал бы MyBase. DoMe ().
Вы не можете назвать версию базового класса.
Если метод не работает над производным классом, то довольно маловероятно, что базовая версия метода будет работать при вызове на экземпляре производного класса. Это просто напрашивается на неприятности. Класс не был разработан для прокладывания себе путь, и что Вы пытаетесь сделать, вероятно, просто заставит другие части класса вести себя непредсказуемо.
Почему необходимо назвать этот метод на объекте, когда объект говорит Вам напрямую, что не будет работать?
Мне кажется, что эти классы имеют некоторые недостатки дизайна, и если Нельзя изменить классы, возможно, Вам разрешают измениться на более хорошо разработанную библиотеку вместо этого.
Производный класс не должен обеспечивать реализацию метода. Удалите его, и реализацию в базовом классе назовут по умолчанию.
Если, в отличие от Вашего примера, метод в базовом классе абстрактен, и необходимо обеспечить реализацию, но не имеет смысла для производного класса обеспечивать тот затем существует, вероятно, что-то не так с дизайном классов.
public class MyDerived:MyBase{
public override void DoMe()
{
base.DoMe();
}
}
Править:
Вы не можете получить доступ к методу базовых классов с "внешней стороны", не проходя метод подклассов. Ваша единственная опция состоит в том, чтобы инстанцировать Вашего базового класса непосредственно и вызова, это - метод.
MyBase mb = new MyBase();
mb.DoMe();
Учитывая Ваши ограничения, существует другая возможность:
Загрузите.Net Reflector. Декомпилируйтесь существующий код затем вносят любые изменения, необходимо поддерживать ситуацию.
Конечно, рассмотрите законность этого перед продолжением.