![](/img/trans.png)
[英]Is a new object that's created in a static property getter only created once?
[英]Setting a property of an Object once it has been created
我有一個具有2個屬性的對象:
public class Request
{
public int TypeId { get; set; }
public bool isApproved { get; set; }
}
我希望發生的是,如果TypeId
等於1
,我希望isApproved
等於false
,否則在創建新對象時希望它等於true
。 我嘗試了以下操作,但是對我的兩個對象(在構造函數中執行規則的對象)都設置為true
:
public Request() {
if(this.TypeId == 1) {
this.isApproved = false;
}
this.isApproved = true;
}
var request = new Request() {
TypeId = 1
}
var request2 = new Request() {
TypeId = 2
}
我知道為什么會這樣,這是因為在調用構造函數時尚未設置TypeId
,所以它默認為true
。 無論如何,一旦在新創建的對象上設置了TypeId
,我是否可以自動設置此設置?
我還希望以后可以手動更改isApproved
的選項,因此,如果將其設置為false
,則可以將其更改為true
而不會設置自動規則來影響它
我將邏輯放在IsApproved
getter中,並將其IsApproved
只讀值:
public class Request
{
public int TypeId { get; set; }
public bool IsApproved
{
get
{
return this.TypeId != 1;
}
}
哦,C#代碼標准通常還會指定屬性應為CamelCased。
編輯:
我還希望以后可以手動更改isApproved的選項,因此,如果將其設置為false,則可以將其更改為true,而不會設置自動規則來影響它
然后,您需要使用構造函數進行設置。 (如Alex所建議)
public class Request
{
public int TypeId { get; set; }
public bool IsApproved { get; set; }
public Request(int typeId)
{
this.TypeId = typeId;
this.IsApproved = typeId != 1;
}
}
嘗試改變
public int TypeId { get; set; }
至
public int _typeId;
public int TypeId
{
get
{
return _typeId;
}
set
{
_typeId = value;
isApproved = value != 1;
}
}
C#4.0允許您為方法參數分配默認值,並使您能夠執行以下操作:
public Request(int TypeId = 1)
{
approved = TypeId != 1;
}
用法:
var request = new Request(2); // approved = true
var request2 = new Request(1); //approved = false
public class Request
{
private int _typeId;
public int TypeId {
get { return _typeId; }
set {
_typeId = value;
isApproved = _typeId != 1;
}
}
public bool isApproved { get; private set; }
}
public class Request
{
private int _typeId;
public int TypeId
get
{
return _typeId;
}
set
{
isApproved = value != 1;
_typeId = value;
}
public bool isApproved { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.