2012-05-30 4 views
1

Я ищу, чтобы создать классы расширения, которые расширяют Entity Framework Entities в другой сборке для объектов EF. Я также хочу кодировать некоторые дополнительные/общие методы в классе методов расширения (используя T4), а затем иметь возможность создавать класс методов частичных расширений с дополнительными настраиваемыми методами. Это возможно.C#: Возможно ли иметь частичные классы расширения

+0

Что вы пробовали? Я не совсем понимаю, что вы пытаетесь сделать, но несколько классов расширений могут расширить один и тот же оригинальный класс, если это то, о чем вы спрашиваете? –

ответ

3

Они вам не нужны. Просто напишите еще один класс расширения.

namespace Namespace1 
{ 
    public static class MyEntityBlibblingExtensions 
    { 
     public void Blibble(this MyEntity self) 
     { 
      // ... 
     } 
    } 
} 

Тогда, в другом месте ...

namespace Namespace2 
{ 
    public static class MyEntityFurtlingExtensions 
    { 
     public void Furtle(this MyEntity self) 
     { 
      // ... 
     } 
    } 
} 

Все импортирования Namespace1 будет видеть метод расширения Blibble() пока ничего импортирования Namespace2 будет видеть Furtle() и импорт и будет видеть оба. Они могут быть в разных сборках или в любом месте, где импортируется пространство имен MyEntity. Таким образом, частичные расширения не являются действительно действительным понятием. Фактически, сама идея размещения методов расширения внутри классов - это немного хак, поскольку это - позор, который они не могли бы раскрыть правила C#, достаточные, чтобы позволить методам расширения жить вне классов.

2

Да, я пробовал, и это сработало.

Нет такой вещи, как класс расширения, существуют только методы расширения, которые должны находиться внутри класса «статические».

У вас могут быть статические частичные классы.

ОБНОВЛЕНИЕ: Извините, я прочитал ваш заголовок, но не текст вашего вопроса. Ответ по-прежнему да, но почему бы просто не создать новые классы? Я не вижу, как в этом случае помогает частичный класс.

+1

Существует такая вещь, как класс расширения. Это статический класс с атрибутом 'Extension'. Он добавляется компилятором, если он содержит какой-либо метод расширения (который тоже будет иметь атрибут 'Extension'), но если вы играете с отражением и/или IL, вам нужно пометить статический класс классом расширения самостоятельно. – hvd

+0

А, ладно, вот ты, мы кое-чему научились. – cbp

2

Основная проблема, которую я вижу здесь, - это фраза «в другой сборке». Если бы это было не так, вы могли бы просто добавить свои методы и т. Д. В дополнительный partial class с обычными методами , и все будет хорошо.

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

Смежные вопросы