[英]is it possible to disable implicit ToString() call?
我想知道是否有一種方法可以獲得此代碼的編譯錯誤:
var customer = new SomeCustomerClass();
Console.WriteLine("Customer address:" + customer);
所以我將被迫寫下這樣的東西:
var customer = new SomeCustomerClass();
Console.WriteLine("Customer address:" + customer.FormatAddress());
Console.WriteLine("Customer accounts:" + customer.FormatAccounts());
如果“ToString”是一個接口,我可以在我的類中使用顯式接口實現。
謝謝。
在編譯時無法阻止此代碼。 Object.ToString
是每個對象的公共協定的一部分,並且沒有辦法阻止它在編譯時被調用。 在這種特殊情況下,編譯器將解析+
到String.Concat(object, object)
,實現最終調用Object.ToString
。 沒有辦法改變這一點。 我認為你最FormatAddress
路徑是覆蓋ToString
並讓它調用FormatAddress
請不要像其他一些人所建議的那樣更改ToString
以拋出異常。 大多數.Net都希望ToString
存在並且不會拋出。 更改它會對程序產生許多意外的負面影響(包括終止這些對象的調試體驗)
您可以在客戶類中覆蓋ToString,如果需要,可以在其中調用FormatAddress方法。
public override string ToString()
{
return FormatAddress();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.