Частичный метод внутри абстрактного класса (C #) - PullRequest
1 голос
/ 16 апреля 2009

Я создаю абстрактный класс, который может наследоваться в частичном классе класса LINQ to SQL. Класс LINQ to SQL содержит несколько встроенных частичных методов. Есть ли способ, которым я могу реализовать один или несколько частичных методов в абстрактном классе? Я знаю, что частичные методы могут содержаться только в частичных классах или структурах. Я уверен, что должен быть другой способ сделать это.

Вот более подробно:

  • У меня может быть таблица базы данных, которая называется Новости. Если я создаю dbml-файл LINQ to SQL, содержащий эту таблицу, автоматически сгенерированный код создает частичный класс для News.
  • Этот частичный класс содержит несколько частичных методов.
  • У меня есть класс, который я создаю и который содержит несколько методов, которые я хотел бы использовать во всех моих классах LINQ to SQL.
  • Одним из этих методов является частичный метод, добавляемый к каждому классу LINQ to SQL. У меня есть общее тело, чтобы использовать для этого метода. Вместо того, чтобы добавлять этот метод к каждому частичному классу, я ищу способ создать его один раз и наследовать его с помощью моего базового класса.

Надеюсь, это поможет объяснить больше.

Ответы [ 2 ]

1 голос
/ 16 апреля 2009

Частичные методы не могут использоваться для наследования. Вы можете добавить обычные методы к абстрактному базовому классу, но они не будут автоматически «сопрягаться» с частичными объявлениями методов. Итак: нет. Конечно, вы можете просто вызвать частичный вызов реализации метода в базовом классе.

Также обратите внимание, что если общий код относится к таким вещам, как аудит (кто / когда), вы также можете сделать это, переопределив метод DataContext 'SubmitChanges и вызвав GetChangeSet:

    public override void SubmitChanges(ConflictMode failureMode)
    {
        ChangeSet delta = GetChangeSet();
        //... use delta.Updates, delta.Inserts and delta.Deletes
        base.SubmitChanges(failureMode);
    }

Наконец, обратите внимание, что вы также можете указать общий базовый класс для всех ваших сущностей в dbml (, например, ); вам не нужно делать это вручную в каждом частичном классе.

0 голосов
/ 16 апреля 2009

Мне кажется, я понимаю, что вы хотите сделать, но если нет, дайте мне знать. Вы можете сделать свой абстрактный базовый класс частичным и включить нужную реализацию в этот класс. В качестве альтернативы вы можете взять свой абстрактный класс и инкапсулировать функции, к которым у ваших дочерних классов должен быть доступ.

...