[英]Validation C# constructor object null dispose
我是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.
}
}
這種類型的驗證不應該在對象的構造函數中完成。 而是應在執行您要執行的操作的方法中完成此操作。
因此,如果您嘗試從銀行帳戶中扣除款項以支付訂單費用,則可以使用“提款”方法執行驗證。
除非在幾種非常罕見的情況下(不適用於此處),否則如果構造函數返回,則它要么返回構造的對象,要么拋出異常。
因此,為避免構造無效的對象,應引發異常。 或者您可以創建一個返回null
的方法,否則該對象將無效,否則將其創建。
另外,您不應該在域對象中處理UI,因此不要在此處顯示該消息框。
不可能“分配”此內容或以其他方式阻止構造函數執行其工作。 您可以拋出異常或以其他方式表明新創建的對象無效。
編輯
您還可以創建一個靜態方法,如果滿足條件,該方法將返回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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.