创建对象后设置其属性

时间:2012-08-09 11:59:16

标签: c#

我有一个具有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我设置影响它

5 个答案:

答案 0 :(得分:4)

我会将逻辑放在IsApproved getter中,并将其设为只读值:

public class Request
{
    public int TypeId { get; set; }
    public bool IsApproved 
    { 
        get
        {
            return this.TypeId != 1;
        }
}

哦,C#代码标准通常也指定属性应该是CamelCased。

编辑:

  

我还想选择手动更改isApproved   以后的日期,所以如果设置为false,我可以将其更改为true   我设置的影响它的自动规则

然后你想用构造函数设置它。 (正如亚历克斯已经建议的那样)

public class Request
{
    public int TypeId { get; set; }
    public bool IsApproved { get; set; }

    public Request(int typeId)
    {
        this.TypeId = typeId;
        this.IsApproved = typeId != 1;
    }
}

答案 1 :(得分:2)

尝试更改

public int TypeId { get; set; }

public int _typeId;

public int TypeId 
{
    get
    {
        return _typeId;
    }
    set
    {
        _typeId = value;
        isApproved = value != 1;
    }
}

答案 2 :(得分:2)

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

答案 3 :(得分:1)

public class Request
{
    private int _typeId;
    public int TypeId { 
        get { return _typeId; }
        set {
            _typeId = value;
            isApproved = _typeId != 1;
        }
    }
    public bool isApproved { get; private set; }
}

答案 4 :(得分:0)

public class Request
{
    private int _typeId;
    public int TypeId 
    get
    {
        return _typeId;
    }
    set
    {
        isApproved = value != 1;
        _typeId = value;
    }

    public bool isApproved { get; set; }
}