我的客戶想出了在項目代碼的每個的ToString()調用,我們應該做一個定製的操作(如添加在數據庫中的行)擴展方法編譯優先
我覺得擴展方法奇怪的要求對我來說會非常有用,如果它爲我提供了壓倒性的設施。
Microsoft爲什麼不允許擴展方法覆蓋類方法的現有行爲的任何原因?
我聽說編譯器優先考慮擴展方法的優先級低於類方法。有沒有辦法將編譯器修改爲優先級擴展方法而不是類方法?
我的客戶想出了在項目代碼的每個的ToString()調用,我們應該做一個定製的操作(如添加在數據庫中的行)擴展方法編譯優先
我覺得擴展方法奇怪的要求對我來說會非常有用,如果它爲我提供了壓倒性的設施。
Microsoft爲什麼不允許擴展方法覆蓋類方法的現有行爲的任何原因?
我聽說編譯器優先考慮擴展方法的優先級低於類方法。有沒有辦法將編譯器修改爲優先級擴展方法而不是類方法?
有沒有辦法將編譯器修改爲優先級擴展方法比類方法更多 ?
不,你不能。
我會從類似question引述埃裏克利珀:
的擴展方法的目的是延長該組的類型可用的方法 ,不重寫現有的方法;這就是爲什麼 他們是所謂的「擴展方法」
您可以使用擴展方法擴展一個類或接口,但不 覆蓋它們。具有相同名稱和 簽名作爲接口或類方法的擴展方法將永遠不會被調用。
實際上,擴展本身存在問題。 因爲實例的ToString()方法將具有擴展性。
還有a good explanation on the Microsoft Developer Network。
簡而言之:
class Program
{
static void Main(string[] args)
{
try
{
string value = "test";
Console.WriteLine(value.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.WriteLine("End");
Console.Read();
}
}
public static class StaticExtensions
{
public static string ToString(this Object obj)
{
if (obj == null)
return "";
else
return obj.GetType().FullName + obj.ToString() ;
}
}
將返回測試。
你應該嘗試另一種方式。也許代理對象或某個東西在那個方向。
這是一個*真*奇怪的要求。我建議你簡單地推回去。 (客戶端是否希望這種行爲對於ToString的每個* implicit *調用,例如在字符串連接中?那麼在.NET框架代碼中調用ToString怎麼樣?) – 2013-02-14 07:17:36
我同意。教育你的客戶。這也是你作爲顧問工作的一部分。 – 2013-02-14 07:18:09
我也同意這個:) ..謝謝你的評論.. – 2013-02-14 07:23:31