должен объявлять тело так как он не помечен модификатором abstract extern или partial
.NET свойство генерации «необходимо объявить тело, поскольку оно не помечено абстрактной или extern» ошибка компиляции
это дает мне эту ошибку компиляции для этих строк:
изменение этого на » 3.5 » решило его. Спасибо, ребята!
9 ответов
добавить в web.config
синтаксис. И вы можете установить различные модификаторы доступа. Вы не на интерфейс ты? А класс это не аннотация это?
кроме того, не имеет значения, какой v. фреймворка вы нацеливаете, потому что это функции компилятора. VS2008 реализует свойство w / backing stores для вас.
вы правы; этот стиль разрешен.
эта ошибка не должна исходить из кода, который вы опубликовали. Согласно MSDN, вы сделали это правильно:http://msdn.microsoft.com/en-us/library/bb384054.aspx
поэтому я бы рекомендовал вам повторно проверить сообщение об ошибке и где компилятор говорит, что ошибка исходит. Текст опубликованного сообщения не содержит ссылки на свойства, и аналогичное сообщение имеется для функций. Все, что отсутствует в реализации, а не на интерфейс или помеченные абстрактные или extern может создать эту ошибку.
эта ошибка также может произойти, если вы используете CodeFile= » MyControl.ascx вносятся.cs » в вашем MyControl.ascx и вместо CodeBehind= » MyControl.ascx вносятся.цезий.»
изменение имени атрибута CodeBehind Исправлена проблема в моем случае.
Это также происходит в проекте необработанного веб-сайта, где не было интернета.сгенерированная конфигурация.
Так это как ответ, но просто убедитесь, что у вас есть.
Это, как долго, как вы положите аннотация спереди, или реализовать методы.
get must declare a body it is not marked abstract, extern, or partial
I wrote the line of code below but the an error was highlighted, below:
get must declare a body it is not marked abstract, extern, or partial
3 Answers 3
You have to supply an implementation for the get since the compiler only allowed auto-implemented properties if both the get and set have no implementation.
If you implement either of them, you have to give an implementation for the other one too.
I expect to have something like this:
The error suggests that you need to provide the body for your get method. So if you have created property by your own then you have to implement either both get and set or none.
If you don’t write a body for get and set a macro is called which adds an hidden private field for your property in order to store the actual value. This is needed because a property has no memory associated with it and simply acts like a method working on your class object. It gives you the convince not to write explecit getter or setter methods like in old times.
If you want to do custom things (others than simply encapsulate a field), you have to declare both bodys since the macro does not know which field it should return.
Just for completeness:
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.11.10.40696
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Каковы различия между extern, abstract и partial для методов в абстрактном классе?
Я пишу абстрактный класс, потому что хочу предоставить несколько часто используемых методов, потребовать несколько методов, которые будут слишком конкретными, и позволить некоторым методам «расширяться». После столкновения с ошибкой компилятора мне интересно, может ли кто-нибудь объяснить различия между extern, аннотация и частичная ключевые слова. Что они означают и когда / где я должен их использовать?
4 ответов
частичная классы и методы-это просто инструмент компиляции. Они позволяют использовать несколько файлов для определения типа. Это в основном используется с автоматически сгенерированным кодом (т. е. дизайнер помещает сгенерированный дизайнером код в отдельный файл, определяющий частичный класс, поэтому вы можете «заполнить» отсутствующий штук, не глядя на детали реализации). Это вряд ли то, что вы будете использовать непосредственно для определения класса.
A partial метод полезен в основном с генерацией кода как способ внедрения функциональности в сгенерированный код. Они являются необязательными, только частными и существуют только если вы предоставите другую половину. Таким образом, существуют также некоторые ограничения вокруг значений return/out для обеспечения определенного назначения. Звонки частичные методы будут полностью опущены компилятором, если нет реализации.
An abstract метод, где реализация должна быть предоставлена производным типом. Среда выполнения гарантирует, что у вас не может быть экземпляра, если все еще есть нереализованные абстрактные методы, поэтому вы уверены, что они будут существовать во время выполнения.
Extern позволит вам использовать методы через dll-import, и этим вы придаете особое значение этому методу, который исходит из внешних источников
*самое важное различие между частичным и абстрактным методом-частичная реализация является необязательной, но реализация абстрактного метода является обязательной *
абстрактные методы строго требуют реализации в абстрактных производных класс!—1—>
основное использование абстрактных методов заключается в том, что они должны быть реализованы для использования класс, потому что эти методы помогают эффективно использовать этот класс
Это ошибка использовать абстрактные (ссылка C#) и extern модификаторы вместе, чтобы изменить один и тот же элемент. Использование модификатора extern означает, что метод реализован вне кода C#, а использование модификатора abstract означает, что реализация метода не предусмотрена в классе.
использовать модификатор Abstract в объявлении класса, чтобы указать, что класс предназначен только в качестве базового класса для других классов. Члены, помеченные как абстрактные или включенные в абстрактный класс, должны быть реализованы классами, производными от абстрактного класса.
частичная тип определения позволяют разделить определение класса, структуры или интерфейса на несколько файлов.
abstract (Справочник по C#)
Модификатор abstract указывает, что изменяемый элемент имеет отсутствующую или неполную реализацию. Модификатор abstract можно использовать с классами, методами, свойствами, индексаторами и событиями. Используйте модификатор abstract в объявлении класса, чтобы указать, что класс предназначен только для использования в качестве базового класса для других классов и не должен быть создан сам по себе. Элементы с пометкой abstract должны быть реализованы не абстрактными классами, производными от абстрактного класса.
Пример 1
Абстрактные классы предоставляют следующие возможности:
Создавать экземпляры абстрактного класса нельзя.
Абстрактный класс может содержать абстрактные методы и методы доступа.
Изменить абстрактный класс с модификатором sealed нельзя, так как два этих модификатора имеют взаимоисключающие значения. Модификатор sealed запрещает наследование класса, в то время как модификатор abstract указывает, что класс обязан иметь производные классы.
Неабстрактный класс, производный от абстрактного класса, должен включать фактические реализации всех наследуемых абстрактных методов и методов доступа.
Модификатор abstract в объявлении метода или свойства позволяет указать, что этот метод или свойство не содержат реализации.
Абстрактные методы предоставляют следующие возможности:
Абстрактный метод неявно представляет собой виртуальный метод.
Объявления абстрактных методов допускаются только в абстрактных классах.
Поскольку объявление абстрактного метода не предоставляет фактической реализации, тело метода отсутствует, а объявление метода заканчивается точкой с запятой, и фигурных скобок (< >) после подписи нет. Пример:
Реализация предоставляется методом override, который является членом неабстрактного класса.
В объявлении абстрактного метода нельзя использовать статические или виртуальные модификаторы.
Действие абстрактных свойств аналогично абстрактным методам, за исключением отличий в синтаксисе объявлений и вызовов.
Использование модификатора abstract в статическом свойстве является недопустимым.
Абстрактное наследуемое свойство можно переопределить в производном классе, включив объявление свойства, которое использует модификатор override.
Дополнительные сведения об абстрактных классах см. в разделе Абстрактные и запечатанные классы и члены классов.
Абстрактный класс должен предоставлять реализацию для всех членов интерфейса.
Абстрактный класс, реализующий интерфейс, может сопоставлять методы интерфейса с абстрактными методами. Пример:
Пример 2
В предыдущем примере при попытке создать экземпляр абстрактного класса с помощью оператора вида:
Выдается сообщение об ошибке, указывающее, что компилятор не может создать экземпляр абстрактного класса BaseClass.
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.
Разделяемые классы и методы (Руководство по программированию в C#)
Можно разделить определение класса, структуры, интерфейса или метода между двумя или более исходными файлами. Каждый исходный файл содержит часть определения класса или метода, а во время компиляции приложения все части объединяются.
Разделяемые классы
Существует несколько ситуаций, когда желательно разделение определения класса.
Чтобы разделить определение класса, используйте модификатор ключевого слова partial, как показано ниже:
Если какая-либо из частей объявлена абстрактной, то весь тип будет считаться абстрактным. Если какая-либо из частей объявлена запечатанной, то весь тип будет считаться запечатанным. Если какая-либо из частей объявляет базовый тип, то весь тип будет наследовать данный класс.
Все части, указывающие базовый класс, должны быть согласованы друг с другом, а части, не использующие базовый класс, все равно наследуют базовый тип. Части могут указывать различные базовые интерфейсы, и окончательный тип будет реализовывать все интерфейсы, перечисленные во всех разделяемых объявлениях. Любые члены класса, структуры или интерфейса, объявленные в разделяемом объявлении, доступны для всех остальных частей. Окончательный тип представляет собой комбинацию всех частей, выполненную во время компиляции.
Модификатор partial недоступен в объявлениях делегатов или перечислений.
В следующем примере показано, что вложенные типы могут быть разделяемыми, даже если тип, в который они вложены, не является разделяемым.
Во время компиляции атрибуты определений разделяемого типа объединяются. В качестве примера рассмотрим следующие объявления:
Они эквивалентны следующим объявлениям:
Следующие элементы объединяются из всех определений разделяемого типа:
В качестве примера рассмотрим следующие объявления:
Они эквивалентны следующим объявлениям:
Ограничения
Имеется несколько правил, которые необходимо выполнять при работе с определениями разделяемого класса.
Дополнительные сведения см. в разделе Ограничения параметров типа.
Примеры
В следующем примере поля и конструктор класса Coords объявлены в одном определении разделяемого класса, а член PrintCoords — в другом определении разделяемого класса.
В следующем примере показано, что можно также разработать разделяемые структуры и интерфейсы.
Разделяемые методы
Разделяемый класс или структура могут содержать разделяемый метод. Одна часть класса содержит сигнатуру метода. В той же или в другой части можно определить реализацию. Если реализация не предоставлена, метод и все вызовы метода удаляются во время компиляции. Реализация может потребоваться в зависимости от сигнатуры метода. Разделяемый метод может не иметь реализацию в следующих случаях.
Любой метод, не соответствующий всем этим ограничениям (например, метод public virtual partial void ), должен предоставлять реализацию. Эта реализация может быть предоставлена генератором источника.
Разделяемые методы позволяют разработчику одного элемента класса объявить метод. Разработчик другого элемента класса может определить этот метод. Существует два сценария, в которых выгодно использовать разделяемые методы: шаблоны, создающие стереотипный код и генераторы источника.
Спецификация языка C#
Дополнительные сведения см. в разделе Разделяемые типы в Спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.