Можно ли использовать жестко закодированные значения в базовом конструкторе? - PullRequest
0 голосов
/ 14 июня 2009

Мне нужно наследовать от базового класса, один метод которого имеет конструктор с 8 аргументами.

Мне никогда не понадобятся все 8 аргументов, мне нужен только один. Однако мне нужно реализовать этот метод.

public MyClass : BaseClass
{    
    public class MyClass(string myArg):base(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
    {
         // do stuff
    }
}

приводит к эпическому сообщению компилятора о сбое, где args2-8 жестко закодированы. Есть намеки?

Пояснение: Аргументы - это все свойства базового класса, которые устанавливаются с помощью этого инициализация.

Поскольку базовый класс является базовым классом, я не могу изменять его свойства или конструктор.

Надеюсь, окончательное редактирование для тех, кто хочет знать аргументы (и нет, открывающая скобка не проблема, в любом случае, спасибо), вот код VB.NET, который я пытаюсь перенести как часть пользовательского членства Provider.

К сожалению, найти пример поставщика членства в C # не удалось.

Public Sub New(ByVal userName As String)
            MyBase.New("Shiningstar.SSSMembershipProvider", userName, _
            userName.GetHashCode, userName, "", "", False, False, Today, _
            Today, Today, Today, Today)

            Me.m_UserName = userName ' UserName() is read only
End Sub

Базовым классом в этом случае является System.Web.Security.MembershipUser

Ответы [ 5 ]

3 голосов
/ 14 июня 2009

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

public class MyBaseClass
    {
        public MyBaseClass ( int arg2, string arg1,string ar3)
        { }
    }

    public class MyClass : MyBaseClass
    {
        public MyClass (int argument) : base (argument, "not supplied", "hard-coded") 
        { }

    }

Надеюсь, это ответит на ваш вопрос.

Редактировать (некоторые камни преткновения:)


Вы уверены, что у вас есть нужные модификаторы доступа (защищенные, внутренние, частные, публичные, защищенные внутренние)?

2 голосов
/ 14 июня 2009

Без точного сообщения об ошибке я не могу быть уверен, но я подозреваю, что ваш arg1 .. arg8 - это поля экземпляра класса, которые нельзя использовать до базового конструктора.

Если вы сделаете их статическими полями, эта проблема будет решена.

1 голос
/ 14 июня 2009

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

1 голос
/ 14 июня 2009

Можете ли вы дать нам больше контекста о том, что такое arg2-arg8?

Существуют ограничения на тип значений, которые могут быть переданы в конструктор базового класса. Например, вы не можете передать поля или свойства экземпляра. Константы, аргументы конструктора и литералы должны быть в порядке.

1 голос
/ 14 июня 2009

Дикая догадка здесь. Проблема в том, что вам не хватает ключевого слова class в объявлении класса?

public class MyClass : BaseClass
{
    public MyClass(string myArg):base(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
    {
         // do stuff
    }
}

И в зависимости от того, что вы делаете в «делать вещи», вы можете выбросить свои myArg ... но это, вероятно, не ваша проблема.

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