Каковы различия между extern, abstract и partial для методов в абстрактном классе?
Я пишу абстрактный класс, потому что хочу предоставить несколько часто используемых методов, потребовать несколько методов, которые будут слишком конкретными, и позволить некоторым методам "расширяться". После столкновения с ошибкой компилятора мне интересно, может ли кто-нибудь объяснить различия между extern, аннотация и частичная ключевые слова. Что они означают и когда / где я должен их использовать?
4 ответов
extern вряд ли будет то, что вы хотите использовать. Это означает, что метод реализован, но реализован извне - и обычно используется в сценариях взаимодействия, где вы определяете метод, имплементированный во внешнем коде.
аннотация, С другой стороны, означает, что вы определяете API для метода, но не обеспечивает реализацию. Подкласс должен будет предоставить реализацию для любых методов или свойств, отмеченных abstract
, или быть . Если вы хотите создать базовый класс и иметь метод или свойство, которые должны быть реализованы подклассами, вы захотите использовать abstract
.
частичная классы и методы-это просто инструмент компиляции. Они позволяют использовать несколько файлов для определения типа. Это в основном используется с автоматически сгенерированным кодом (т. е. дизайнер помещает сгенерированный дизайнером код в отдельный файл, определяющий частичный класс, поэтому вы можете "заполнить" отсутствующий штук, не глядя на детали реализации). Это вряд ли то, что вы будете использовать непосредственно для определения класса.
An extern
метод обычно реализуется через dll-import (P/Invoke) - поэтому у него есть реализация - вы просто не можете ее увидеть.
A partial
метод полезен в основном с генерацией кода как способ внедрения функциональности в сгенерированный код. Они являются необязательными, только частными и существуют только если вы предоставите другую половину. Таким образом, существуют также некоторые ограничения вокруг значений return/out для обеспечения определенного назначения. Звонки частичные методы будут полностью опущены компилятором, если нет реализации.
An abstract
метод, где реализация должна быть предоставлена производным типом. Среда выполнения гарантирует, что у вас не может быть экземпляра, если все еще есть нереализованные абстрактные методы, поэтому вы уверены, что они будут существовать во время выполнения.
Extern позволит вам использовать методы через dll-import, и этим вы придаете особое значение этому методу, который исходит из внешних источников
фрагмент :
- частичный метод должен быть объявлен в пределах частичного класса или частичного struct
- вы не можете иметь модификатор доступа на частичный метод
- частичный метод не может иметь модификаторы доступа или виртуальный, абстрактный, переопределить, новый, запечатанный или extern модификаторы
- частичный метод не может иметь своей реализации перед отдельным объявлением.
- частичный метод может быть определен только и не может быть объявлен в том же частичном классе.
*самое важное различие между частичным и абстрактным методом-частичная реализация является необязательной, но реализация абстрактного метода является обязательной *
абстрактные методы строго требуют реализации в абстрактных производных класс!--1-->
основное использование абстрактных методов заключается в том, что они должны быть реализованы для использования класс, потому что эти методы помогают эффективно использовать этот класс
Extern:http://msdn.microsoft.com/en-us/library/e59b22c5%28v=vs.80%29.aspx
Это ошибка использовать абстрактные (ссылка C#) и extern модификаторы вместе, чтобы изменить один и тот же элемент. Использование модификатора extern означает, что метод реализован вне кода C#, а использование модификатора abstract означает, что реализация метода не предусмотрена в классе.
Аннотация: http://msdn.microsoft.com/en-us/library/sf985hc5%28v=vs.80%29.aspx
использовать модификатор Abstract в объявлении класса, чтобы указать, что класс предназначен только в качестве базового класса для других классов. Члены, помеченные как абстрактные или включенные в абстрактный класс, должны быть реализованы классами, производными от абстрактного класса.
частично:http://msdn.microsoft.com/en-us/library/wbx7zzdd%28v=vs.80%29.aspx
частичная тип определения позволяют разделить определение класса, структуры или интерфейса на несколько файлов.