我是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.
}
}
答案 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");
}
}