验证c#构造函数对象空处理

本文关键字:处理 对象 构造函数 验证 | 更新日期: 2023-09-27 18:10:41

我是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.
        }
    }

验证c#构造函数对象空处理

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

因此,如果您试图从银行帐户中扣除款项以支付订单,您将在"Withdraw"方法中执行验证。

如果构造函数返回,它要么返回已构造的对象,要么抛出异常。

因此,为了避免构造无效的对象,应该抛出异常。或者您可以创建一个返回null的方法,如果该对象无效,则创建它。

另外,您不应该在域对象中处理UI,所以不要在那里显示消息框

不可能对this进行"赋值"或以其他方式阻止构造函数完成其工作。您可以抛出异常或以其他方式指出,新创建的对象是无效的。

EDIT
您还可以创建一个静态方法,如果满足条件,该方法将返回一个Bank对象,否则返回null。

这里没有什么比其他答案更新鲜的了。我只是想告诉你怎么做。

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");
    }
}