2011-07-28 6 views
3

저는 .NET 2010 프로젝트가 있습니다. 여기서는 기본 사용자 클래스를 만듭니다. 그것을 인스턴스화하고 성공적으로 데이터로 채 웁니다. 그것이 그 일을하는 전체 시간에, 만약 내가 그 클래스 위에 마우스를 가져 가면, 그것이 그것의 속성을 채우는 것처럼, 그것은 아무것도 아니라고 말합니다. 나중에 속성에 값이 있다고하더라도 클래스가 아무 것도 아니라고하더라도 UI에 나를 물들입니다.왜 내 수업이 없습니까?

내가 클래스를 인스턴스화 할 DO ...

Dim oExtendedUser As New ExtendedUser

여기에 클래스의 사용의 정의는 ...

Public Class ExtendedUser 
    Inherits System.Web.Security.MembershipUser 

    Public Sub New() 
     _Role = New Role 

    End Sub 

    Public Property ExtendedUserID As Int32 
    Public Property FirstName As String 
    Public Property LastName As String 
    Public Property Phone As String 
    Public Property UserID As Guid 
    Public Property Role As Role 
    Public Property UserName() As String 
    Public Property Password() As String 
    Public Property SecurityQuestion() As String 
    Public Property SecurityAnswer() As String 
End Class 

나는 클래스를 변경했습니다. MyBase.New()를 추가했지만 문제가 지속됩니다. UI에서 버튼을 클릭 할 때 실행되는 코드는 다음과 같습니다. 이사 당신은의 toString 재정의 속임수있어

Public Class Director 

    Public Sub New() 
     _ExtendedUser = New ExtendedUser 

    End Sub 

    Public Property ID As Int32 
    Public Property ExtendedUser As ExtendedUser 

End Class 
+0

어떻게'oExtendedUser'를 사용하고 있습니까 –

+0

'locals' 창에 채워진 객체를 볼 수 있습니까? –

+0

해당 속성의 값이 채워지는 것을 볼 수 있습니다. 그러나 클래스에 대해서는 null 시스템 참조를 얻습니다. – BladeBrown

답변

4

...하는을 속성으로,

Dim oCase As New BE.Case 
Dim oDirector As New BE.Director 
oDirector = SessionManager.Director 'the values are here 
oCase.Investigator.ExtendedUserID = oDirector.ExtendedUser.ExtendedUserID 

ExtendedUSer

을 가지고 있으며, 여기에 이사입니다. 개체가 존재하지만 있으며, toString 메소드 오버라이드 (override) : MembershipUser.ToString

가이 문제를 확인하는 간단한 클래스와 그것을 시도하려면 :

VB.NET을

Public Class Test 
    Public Property TestString As String 

    Public Overrides Function ToString() As String 
     Return Me.TestString 
    End Function 

End Class 

C#

public class Test 
{ 
    public string TestString { get; set; } 

    public override string ToString() 
    { 
     return this.TestString; 
    } 
} 

이 코드를 사용하면 ToString 값이 Nothing이 될 것이므로 Watch에서 Nothing to Test를 보여줍니다. 개체가 있지만 Visual Studio에서 ToString 메서드를 사용하여 값 필드를 채우는 중입니다.이 시점에서 Nothing입니다.

VB.NET 빈 문자열을 얻을 것이다이 코드

Public Class Test 
    Public Property TestString As String = "" 

    Public Overrides Function ToString() As String 
     Return Me.TestString 
    End Function 

End Class 

C#을

public class Test 
{ 
     public Test() 
     { 
      this.TestString = ""; 
     } 

    public string TestString { get; set; } 

    public override string ToString() 
    { 
     return this.TestString; 
    } 

} 

.

코드로 돌아가려면 MembershipUser를 확장 할 수 없으므로이 가이드 라인 (How to: Implement a Custom Membership User)을 따라야합니다. 실제 확장 기능으로는 작동하지 않는 많은 기능이 있습니다 (예 : 사용자 이름이 기본 확장 기능을 섀도 잉하는 경우).

this question도 참조하십시오. 사용자 "엔터티"를 상속보다 쉽게 ​​확장 할 수있는 방법이 있습니다.

+0

+1 팹 응답, 당신이 그것에 대해 생각할 때 분명하지만 이전에는 그것에 대해 생각한 적이 없었습니다. –

+0

@David Steele : Nothing In VS를 표시하고 여전히 속성을 볼 수있는 것은 실제로 WTF 순간입니다. P – Matthieu

관련 문제