Obscure «не реализует» ошибку компиляции - PullRequest
0 голосов
/ 20 марта 2012

Я пишу свое первое приложение MVC прямо сейчас и создаю новый MembershipProvider, но сталкиваюсь с некоторыми ошибками компиляции, которые просто неверны в процессе. Вот мой код:

public class ProfileProvider : MembershipProvider
    {
        protected NameValueCollection Config = null;
        protected new String Name = null;
        protected String _PasswordStrengthRegularExpression = "";
        protected int _MinRequiredNonAlphanumericCharacters = 0;
        protected int _MinRequiredPasswordLength = 0;
        protected String _PasswordFormat = "";
        protected Boolean _RequiresUniqueEmail = false;
        protected int _PasswordAttemptWindow = 0;
        protected int _MaxInvalidPasswordAttempts = 0;
        protected String _ApplicationName = "";
        protected Boolean _RequiresQuestionAndAnswer = false;
        protected Boolean _EnabledPasswordReset = false;
        protected Boolean _EnablePasswordRetrieval = false;

        protected new String PasswordStrengthRegularExpression
        {
            get
            {
                return this._PasswordStrengthRegularExpression;
            }
            set
            {
                this._PasswordStrengthRegularExpression = value;
            }
        }
        public new int MinRequiredNonAlphanumericCharacters
        {
            get
            {
                return this._MinRequiredNonAlphanumericCharacters;
            }
            set
            {
                this._MinRequiredNonAlphanumericCharacters = value;
            }
        }
        public new int MinRequiredPasswordLength
        {
            get
            {
                return _MinRequiredPasswordLength;
            }
            set
            {
                this._MinRequiredPasswordLength = value;
            }
        }
        public new String PasswordFormat
        {
            get
            {
                return this._PasswordFormat;
            }
            set
            {
                this._PasswordFormat = value;
            }
        }
        public new Boolean RequiresUniqueEmail
        {
            get
            {
                return _RequiresUniqueEmail;
            }
            set
            {
                this._RequiresUniqueEmail = value;
            }
        }
        public new int PasswordAttemptWindow
        {
            get
            {
                return this._PasswordAttemptWindow;
            }
            set
            {
                this._PasswordAttemptWindow = value;
            }
        }
        public new int MaxInvalidPasswordAttempts
        {
            get
            {
                return this._MaxInvalidPasswordAttempts;
            }
            set
            {
                this._MaxInvalidPasswordAttempts = value;
            }
        }
        public new String ApplicationName
        {
            get
            {
                return this._ApplicationName;
            }
            set
            {
                this._ApplicationName = value;
            }
        }
        public new Boolean RequiresQuestionAndAnswer
        {
            get
            {
                return this._RequiresQuestionAndAnswer;
            }
            set
            {
                this._RequiresQuestionAndAnswer = value;
            }
        }
        public new Boolean EnablePasswordReset
        {
            get
            {
                return this._EnabledPasswordReset;
            }
            set
            {
                this._EnabledPasswordReset = value;
            }
        }
        public new Boolean EnablePasswordRetrieval
        {
            get
            {
                return this._EnablePasswordRetrieval;
            }
            set
            {
                this._EnablePasswordRetrieval = value;
            }
        }

А вот мои ошибки компиляции:

Error   5   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.RequiresUniqueEmail.get'    C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   10  'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.RequiresQuestionAndAnswer.get'  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   1   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.PasswordStrengthRegularExpression.get'  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   4   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.PasswordFormat.get' C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   6   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.PasswordAttemptWindow.get'  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   3   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.MinRequiredPasswordLength.get'  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   2   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.MinRequiredNonAlphanumericCharacters.get'   C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   7   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.MaxInvalidPasswordAttempts.get' C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   12  'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.EnablePasswordRetrieval.get'    C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   11  'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.EnablePasswordReset.get'    C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   8   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.ApplicationName.set'    C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   9   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.ApplicationName.get'    C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC

ошибки имеют смысл для меня; вроде «Эй, тупица, тебе нужны эти вещи», но факт в том, что я добавил эти вещи. Любые мысли приветствуются. Спасибо заранее.

::: Редактировать :::

Забыл упомянуть, что я пытался заменить 'new' на 'override' и оказался в похожей лодке. Вот мои ошибки с этим изменением:

Error   7   'EmptyMVC.Controllers.ProfileProvider.RequiresUniqueEmail.set': cannot override because 'System.Web.Security.MembershipProvider.RequiresUniqueEmail' does not have an overridable set accessor  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   78  13  EmptyMVC
Error   10  'EmptyMVC.Controllers.ProfileProvider.RequiresQuestionAndAnswer.set': cannot override because 'System.Web.Security.MembershipProvider.RequiresQuestionAndAnswer' does not have an overridable set accessor  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   122 13  EmptyMVC
Error   3   'EmptyMVC.Controllers.ProfileProvider.PasswordStrengthRegularExpression': cannot change access modifiers when overriding 'public' inherited member 'System.Web.Security.MembershipProvider.PasswordStrengthRegularExpression'   C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   28  35  EmptyMVC
Error   6   'EmptyMVC.Controllers.ProfileProvider.PasswordFormat': type must be 'System.Web.Security.MembershipPasswordFormat' to match overridden member 'System.Web.Security.MembershipProvider.PasswordFormat'   C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   61  32  EmptyMVC
Error   8   'EmptyMVC.Controllers.ProfileProvider.PasswordAttemptWindow.set': cannot override because 'System.Web.Security.MembershipProvider.PasswordAttemptWindow' does not have an overridable set accessor  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   89  13  EmptyMVC
Error   5   'EmptyMVC.Controllers.ProfileProvider.MinRequiredPasswordLength.set': cannot override because 'System.Web.Security.MembershipProvider.MinRequiredPasswordLength' does not have an overridable set accessor  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   56  13  EmptyMVC
Error   4   'EmptyMVC.Controllers.ProfileProvider.MinRequiredNonAlphanumericCharacters.set': cannot override because 'System.Web.Security.MembershipProvider.MinRequiredNonAlphanumericCharacters' does not have an overridable set accessor    C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   45  13  EmptyMVC
Error   9   'EmptyMVC.Controllers.ProfileProvider.MaxInvalidPasswordAttempts.set': cannot override because 'System.Web.Security.MembershipProvider.MaxInvalidPasswordAttempts' does not have an overridable set accessor    C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   100 13  EmptyMVC
Error   12  'EmptyMVC.Controllers.ProfileProvider.EnablePasswordRetrieval.set': cannot override because 'System.Web.Security.MembershipProvider.EnablePasswordRetrieval' does not have an overridable set accessor  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   144 13  EmptyMVC
Error   11  'EmptyMVC.Controllers.ProfileProvider.EnablePasswordReset.set': cannot override because 'System.Web.Security.MembershipProvider.EnablePasswordReset' does not have an overridable set accessor  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   133 13  EmptyMVC
Error   1   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.PasswordStrengthRegularExpression.get'  C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC
Error   2   'EmptyMVC.Controllers.ProfileProvider' does not implement inherited abstract member 'System.Web.Security.MembershipProvider.PasswordFormat.get' C:\Users\DigitalJedi\documents\visual studio 2010\Projects\EmptyMVC\EmptyMVC\Controllers\ProfileController.cs   12  18  EmptyMVC

1 Ответ

6 голосов
/ 20 марта 2012

Вы должны использовать override вместо new в своих методах.Когда вы используете new, он создает новый метод, который скрывает существующий метод с тем же именем в базовом классе, но фактически не реализует этот метод.Поскольку метод объявлен abstract в базовом классе, вы должны реализовать его в любом неабстрактном наследующем классе.Использование override информирует компилятор о том, что вы реализуете абстрактный метод, определенный в базовом классе, а не заменяете его, как это делает new.

Edit : получаемые вами сообщения об ошибкахкогда вы используете override, потому что MembershipProvider не реализует сеттеры для этих свойств.Удалите settors для этих свойств, и ваши ошибки компилятора исчезнут.Скорее всего, вы захотите установить вспомогательные поля для этих свойств при создании или настройке провайдера.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...