验证C#构造函数对象null dispose

时间:2011-10-08 18:10:59

标签: c# validation object constructor null

我是c#中面向对象编程的新手。所以请耐心等待我。 我不想创建对象,如果this.OrderCost()大于10000.00。如何删除此对象。在这里做验证是否正确。什么是最好的方式。

 public Bank(string bankCode, string bankName)
    {
        this.bankCode= bankCode;
        this.bankName= bankName;


        if (this.orderCost() > moneyInBankAccount)
        {
            MessageBox.Show("Order amount exceeds the money in bank account.");
            this. = null;  // <--what to do here.
        }
    }

4 个答案:

答案 0 :(得分:4)

不应在对象的构造函数中完成此类型的验证。相反,它应该在执行您要执行的操作的方法中完成。

因此,如果您试图从银行账户中扣除资金以支付订单,您将在“提款”方法中执行验证。

答案 1 :(得分:2)

除了在这里不适用的几种极少数情况下,如果构造函数返回,它将返回构造的对象,否则会抛出异常。

因此,为避免构造无效的对象,应抛出异常。或者您可以创建一个返回null的方法,该对象将无效并以其他方式创建。

此外,您不应该处理域对象中的UI,因此不要在那里显示该消息框。

答案 2 :(得分:1)

无法“分配”此或以其他方式阻止构造函数执行其工作。您可以抛出异常或以其他方式指示新创建的对象无效。

编辑
您还可以创建一个静态方法,在满足条件时返回Bank对象,否则返回null。

答案 3 :(得分:0)

这里没有什么比其他答案更新的了。只是为了说明你如何做到这一点。

public class Bank
{
    public Bank(string bankCode, string bankName)
    {
        if (ConditionNotMet) throw new SomeException("");
        .....
    }
}

public class Bank
{
    private Bank(string bankCode, string bankName)
    {
    }

    public static Bank Create(string bankCode, string bankName)
    {
        if (ConditionNotMet) return null; //or throw Exception
        return new Bank(string bankCode, string bankName);
    }
}

如果您不相信尝试阅读测试类的“I”

public class Test
{
    public int I=0;
    public Test()
    {
        I=666;
        throw new Exception("No you can't read");
    }
}