2011-07-28 10 views
3

私は.NET 2010プロジェクトを持っています。その中で、私は基本的なユーザークラスを作成します。それをインスタンス化し、データで正常に記入します。私がクラスを上に置くと、それがそのプロパティを満たすときでさえ、それは何もないと言います。後で、それはプロパティはクラスが何もないと言っている値を持っていますが、それはUIで私をホーローします。なぜ私のクラスは何ですか?

私は

Dim oExtendedUser As New ExtendedUser

、ここではclasss定義です...クラスをinstatiate DO ...

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上では、ボタンがクリックされたときに実行されるコードがあります。 Directorは、あなたがた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

そのプロパティの値が入力されているのがわかります。しかし、クラスのために私はヌルシステム参照を取得します。 – BladeBrown

答えて

4

...、propretyとして、

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メソッドメソッドよりも優先されます: 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 Test to Instanceが表示されます。オブジェクトは存在しますが、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の瞬間です – Matthieu

関連する問題