验证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.
}
}
这种类型的验证不应该在对象的构造函数中进行。相反,它应该在执行您想要执行的操作的方法中完成。
因此,如果您试图从银行帐户中扣除款项以支付订单,您将在"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");
}
}