множественное наследование c#

Я хотел бы достигнуть этого в C#

(Псевдокод)

class A;

class B : A;

class C : A, B;

...

A ac = (A)c;

...

B bc = (B)c;

Действительно ли это возможно?

7
задан Dave Cluderay 13 February 2010 в 08:52
поделиться

4 ответа

Нет. C # не поддерживает множественное наследование классов.

Класс может наследовать от одного класса, а также может реализовывать несколько интерфейсов.

3
ответ дан 6 December 2019 в 15:21
поделиться

Нет, приказ не имеет значения.

Почти все 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-

вы можете использовать интерфейсы для множественного наследования.

0
ответ дан 6 December 2019 в 15:21
поделиться

В данном конкретном случае множественное наследование не нужно: Если класс 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

(Как уже говорили другие, если вам нужно что-то сродни множественному наследованию, используйте интерфейсы, поскольку класс может реализовать их столько, сколько вам нужно. )

9
ответ дан 6 December 2019 в 15:21
поделиться

Это невозможно в C#, но вы также должны подумать, действительно ли это тот сценарий, который вы хотите.

Действительно ли C имеет A и B ? Или C has является A и B. Если верно последнее, то вместо наследования следует использовать композицию.

2
ответ дан 6 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

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