user3051461
user3051461

Reputation: 41

VB.NET hide a property member

I am currently working on the return class. The problem is I want to show the certain member only when some of the condition meet. Below is my code. I only want to show ResponseMsg member when the ResponseCode is 99 otherwise it will be hidden.

Public Class LoginResponse
    Public Property TerminalID As String       
    Public Property ReaderID As String    
    Public Property TransRef As String
    Public Property TransDateTime As String
    Public Property Timeout As Integer
    Public Property ResponseCode As String
    Public Property ResponseMsg As String
    Public Property Cryptogram As String
End Class

Upvotes: 1

Views: 303

Answers (2)

MrPaulch
MrPaulch

Reputation: 1418

You might want to think about making a specialized class.

Let's say you have your basic LoginResponse

Public Class LoginResponse
    Public Property TerminalID As String       
    Public Property ReaderID As String    
    Public Property TransRef As String
    Public Property TransDateTime As String
    Public Property Timeout As Integer
    Public Property ResponseCode As String
    ' Note: no ResponseMsg here
    Public Property Cryptogram As String
End Class

Then you'd have an extended response class inheriting your basic LoginResponse:

Public Class LoginResponseEx : Inherits LoginResponse
     Public Property ResponseMsg As String
End Class

Then where ever you create those LoginResponse objects, you just create one of the apropriate.

Let's say you have a GetResponse() procedure like:

Public Function GetResponse() As LoginResponse
    Dim result As LoginResponse = Nothing 
    Dim code As Integer = GetSomeCode() 
    ' ... get the other properties 

    ' Say you have a const or something with the appropriate code: SPECIAL_CODE
    If code = SPECIAL_CODE Then
        Dim msg As String = GetSomeMessage()
        result = New LoginResponseEx(..., code, msg, ...) ' have a special Response
    Else
        result = New LoginResponse(..., code, ...) ' have a normal Response
    End If
    Return result
End Function

Finally when checking the response you just check whether you have a special value in ResponseCode and cast the object respectivly.

'...
Dim resp as LoginResponse = GetResponse()
If resp.ResponseCode = SPECIAL_CODE Then
    Dim respx as LoginResponseEx = CType(resp, LoginResponseEx)
    Console.WriteLine("ResponseMessage was: " & respx.ResponseMsg
Else
    Console.WriteLine("No ResponseMessage")
End If
'...

This way you have your basic LoginResponse with the ResponseMsg hidden in the special class ResponseLoginEx

Note when you do this you should think about how you implement virtual classes. e.g. the fields might have to be declared as Protected instead of Private, though i'm sure you'll do fine.

This also works with Serializable classes, of course.

Upvotes: 0

Yatrix
Yatrix

Reputation: 13805

You can't that I know of. But you can do something like this:

Public Property ResponseMsg
  Get
    If ResponseCode <> SomeCodeValue
      Return _responseCode
    Else
       Return Nothing
    End if
  End Get
End Property

Upvotes: 1

Related Questions