2009-06-14 6 views
0

기본 클래스에서 상속해야하는데 그 중 하나의 메서드에는 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 코드가있다. 멤버십 제공자.

슬프게도 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

+4

물론입니다. 오류 메시지를 게시하십시오 (적어도). 그리고 기본 클래스의 생성자의 서명. –

+1

오류 메시지는 무엇입니까? BaseClass 및 MyClass 생성자 정의를 붙여 넣을 수 있습니까? – NilObject

+0

Mayb 당신은 우리에게 와일드루 arg1-8이 어디 있는지, 어디서 왔는지를 알 수 있도록 실제 코드를 보여 주어야합니다. –

답변

2

정확한 오류 메시지가 없으면 확신 할 수 없지만 arg1 .. arg8이 기본 생성자보다 먼저 사용할 수없는 클래스의 인스턴스 필드라고 의심됩니다.

정적 필드를 만들면 해당 문제가 해결됩니다.

+0

arg1-8은 기본 클래스 속성입니다. 기본 클래스는 슬프게도 수정할 수 없습니다. – dogged

+0

기본 클래스를 생성 할 때까지는 사용할 수 없습니다. – SLaks

+0

어떤 속성을 사용하려고합니까? VB 예제에서 제공 한 매개 변수 중 기본 클래스의 속성이 없습니다. – SLaks

3

, 그래서 난 당신이 정상 생성자를 의미 가정합니다. 당신은 하드 코드에서 일부 매개 변수에 할 수 있어야 다음 오류없이 컴파일 작은 코드의 예는 다음과 같습니다.

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") 
     { } 

    } 

나는이 질문에 대한 답변이 되었기를 바랍니다.

편집 (일부 우연히 발견-돌 :


당신이 올바른 액세스 수정 자 (보호, 내부, 개인, 공공, 내부 보호)이 확실한가요?

1

여기에 맞춰보세요. 클래스 선언에 class 키워드가 누락되었습니다.

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

그리고 당신은 "물건을 할"에 무엇에 따라, 당신은 당신의 myArg를 버리고 수 있습니다 ...하지만 그건 아마 당신의 문제가 아니에요.

+0

나는 클래스를 클래스로 선언 할만큼 충분한 것을 알지 못했을 경우, 상속보다 더 큰 문제가있을 수 있습니다. 코드에 존재하지 않는 샘플에서 오타가 있다고 가정 할 수 있습니까? 아니면 어딘가에 오류가 나타날 수 있습니다. 아니요? – dogged

+1

정말로 당신의 문제가 무엇인지 분명하지 않습니다. 나는 그것이 야생의 추측이라고 언급했지만, 코멘트를 작성할 때 오류 메시지를 제공하지 않았기 때문에 (그리고 아마도 나는 장님이지만 나는 여전히 그것을 볼 수 없어), 나는 기본적인 실수를 한 초심자 프로그래머 일 수 있던 것을 돕는 것을 시도하는 나의 시간. 내가 제공 한 정보로 다른 사람이 문제를 해결할 수 있기를 바랍니다. 어떻게해야할지 모르겠습니다. 행운을 빕니다. –

1

arg2-arg8에 대한 자세한 내용을 알려 줄 수 있습니까?

기본 클래스 생성자에 전달할 수있는 값 유형에 제한이 있습니다. 예를 들어 인스턴스 필드 나 속성을 전달할 수 없습니다. 상수, 생성자 인수 및 리터럴은 잘되어야합니다.

+0

이제 원하는 컨텍스트를 모두 갖추어야합니다. – dogged

1

생성자에 대한 인수로 기본 클래스 나 현재 클래스의 속성을 사용하려면 이러한 속성을 정적으로 유지해야합니다. 나는 당신이 얻고있는 오류가 "이 참조가 초기화되지 않았 음"또는 유사하다고 추측합니다. 값을 리턴하여 인수로 사용하는 메소드의 경우도 마찬가지입니다.

관련 문제