簡體   English   中英

創建對象后設置其屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM