Я хотел бы достигнуть этого в C#
(Псевдокод)
class A;
class B : A;
class C : A, B;
...
A ac = (A)c;
...
B bc = (B)c;
Действительно ли это возможно?
Нет. C # не поддерживает множественное наследование классов.
Класс может наследовать от одного класса, а также может реализовывать несколько интерфейсов.
Нет, приказ не имеет значения.
Почти все RDBMS (такие как MS Access, MySQL, SQL Server, ORACLE и т.д.) используют оптимизатор на основе затрат на основе статистики столбцов. В большинстве ситуаций оптимизатор выберет правильный план. В приведенном примере заказ не имеет значения (при условии актуализации статистики).
Чтобы решить, какую стратегию запроса использовать, оптимизатор Jet Engine использует статистика. Ниже перечислены следующие факторы: некоторые из факторов, которые они статистика основана на:
- Количество записей в таблице
- Количество страниц данных в таблице
- Расположение таблицы
- Присутствуют ли индексы
- Насколько уникальны индексы
Примечание : Вы не можете просматривать схемы оптимизации ядра базы данных Jet, и вы не может указать, как оптимизировать вопрос. Тем не менее, вы можете использовать Documenter базы данных для определения присутствуют ли индексы и каким образом уникальный индекс.
На основе этих статистических данных Затем оптимизатор выбирает лучший внутренняя стратегия запроса для обработки с определенным запросом.
Статистика обновляется всякий раз, когда запрос компилируется. Запрос помечен для компиляции при сохранении любого изменения в запросе (или его базовые таблицы) и когда база данных уплотнена. Если запрос помечен для компиляции, компиляция и происходит обновление статистики при следующем выполнении запроса. Компиляция обычно занимает от одного секунды до четырех секунд.
При добавлении значительного количества записей в базе данных, необходимо открыть, а затем сохранить запросы в перекомпилировать запросы. Например, если вы проектируете, а затем тестируете запрос по используя небольшой набор образцов данных, должен перекомпилировать запрос после дополнительные записи добавляются в база данных. Когда вы это делаете, вы хотите чтобы убедиться, что оптимальный запрос производительность достигается, когда приложение используется.
Может представлять интерес: ACC: как оптимизировать запросы в Microsoft Access 2,0, Microsoft Access 95 и Microsoft Access 97
Часто задаваемые вопросы по производительности Microsoft Access Тони Тьюза .
-121--1340797-Не очень много информации о фактических параметрах по умолчанию на веб-сайтах Майкрософт, однако Geoff Chappell, похоже, провел некоторые исследования по этой теме. Ссылка:
http://www.geoffchappell.com/viewer.htm?doc = studies/msvc/cl/cl/initial.htm & tx = 27
Поскольку мы все знаем, что говорится в документации и что на самом деле делает программное обеспечение, это две разные вещи.
Чтобы ответить на вопрос, вы можете узнать, какие опции cl передаются модулям компилятора c1xx.dll и c2.dll, передав параметру/Bd значение cl:
cl /Bd helloworld.cpp
Чтобы увидеть переменные среды, которые компилятор и компоновщик использует тип:
cl /Be helloworld.cpp
-121--4029008- вы можете использовать интерфейсы для множественного наследования.
В данном конкретном случае множественное наследование не нужно: Если класс C
наследуется только от B
, любой экземпляр класса C
может быть приведен как к B
так и к A
; поскольку B
уже происходит от A
, C
не нужно снова выводить от A
:
class A { ... }
class B : A { ... }
class C : B { ... }
...
C c = new C();
B bc = (B)c; // <-- will work just fine without multiple inheritance
A ac = (A)c; // <-- ditto
(Как уже говорили другие, если вам нужно что-то сродни множественному наследованию, используйте интерфейсы, поскольку класс может реализовать их столько, сколько вам нужно. )
Это невозможно в C#, но вы также должны подумать, действительно ли это тот сценарий, который вы хотите.
Действительно ли C имеет A и B ? Или C has является A и B. Если верно последнее, то вместо наследования следует использовать композицию.