In C#, I can have a property without having the need to declare a private variable. My VB6 code that looked like this
'local variable(s) to hold property value(s)
Private mvarPhoneNumber As String 'local copy
Public Property Let PhoneNumber(ByVal vData As String)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.PhoneNumber = 5
mvarPhoneNumber = vData
End Property
Public Property Get PhoneNumber() As String
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.PhoneNumber
PhoneNumber = mvarPhoneNumber
End Property
can now look like this.
public string PhoneNumber{get;set;}
How can I put validation in the getter and setter methods in C#? I tried adding a validation like this.
public string PhoneNumber
{
get
{
return PhoneNumber;
}
set
{
if (value.Length <= 30)
{
PhoneNumber = value;
}
else
{
PhoneNumber = "EXCEEDS LENGTH";
}
}
}
The get part of this code won't compile. Do I need to revert to using a private variable?
Yes, you will have to create a backing field:
string _phoneNumber;
public string PhoneNumber
{
get
{
return _phoneNumber;
}
set
{
if (value.Length <= 30)
{
_phoneNumber = value;
}
else
{
_phoneNumber = "EXCEEDS LENGTH";
}
}
}
Keep in mind that this implementation is no different from an automatically implemented property. When you use an automatically implemented property you are simply allowing the compiler to create the backing field for you. If you want to add any custom logic to the get
or set
you have to create the field yourself as I have shown above.