![](/img/trans.png)
[英]Can I use generic getter/setter methods on multiple lists of same base types in C#
[英]How can I put validation in the getter and setter methods in C#?
在C#中,我可以擁有一個屬性而無需聲明私有變量。 我的VB6代碼看起來像這樣
'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
現在看起來像這樣。
public string PhoneNumber{get;set;}
如何在C#中的getter和setter方法中進行驗證? 我嘗試添加這樣的驗證。
public string PhoneNumber
{
get
{
return PhoneNumber;
}
set
{
if (value.Length <= 30)
{
PhoneNumber = value;
}
else
{
PhoneNumber = "EXCEEDS LENGTH";
}
}
}
此代碼的get部分將無法編譯。 我是否需要恢復使用私有變量?
是的,您必須創建一個支持字段:
string _phoneNumber;
public string PhoneNumber
{
get
{
return _phoneNumber;
}
set
{
if (value.Length <= 30)
{
_phoneNumber = value;
}
else
{
_phoneNumber = "EXCEEDS LENGTH";
}
}
}
請記住,此實現與自動實現的屬性沒有區別。 當您使用自動實現的屬性時,您只需允許編譯器為您創建支持字段。 如果你想在get
或set
添加任何自定義邏輯,你必須自己創建字段,如上所示。
您不一定需要局部變量。 從理論上講,您可以在get
/ set
屬性中實現所需的任何功能。 但是,在您的示例中,您具有對get
/ set
屬性的遞歸訪問,這對於它的實現方式沒有任何意義。 所以,在你的具體案例中,你需要一個局部變量,這是正確的。
我會做這樣的事情,以避免NullReferenceException
以及縮短整體代碼。
public string PhoneNumber
{
get { return _phoneNumber; }
set
{
var v = value ?? string.Empty;
_phoneNumber = v.Length <= 30 ? v : "EXCEEDS LENGTH";
}
}
private string _phoneNumber;
是的你是。 當您使用快捷方式“隱式”語法時,它會秘密為您創建一個名為_phoneNumber的支持字段。 明確定義屬性時,需要創建自己的支持字段。 在您的屬性定義正上方放置:
private string _phoneNumber;
然后在你的財產中使用:
get
{
return _phoneNumber;
}
在這里查看幾個替代方案: 在自動屬性中訪問支持字段
但簡短的回答是肯定的,你必須有驗證的支持領域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.