c#中一切皆源於object,而且缺省會有tostring函式的實現。有時為了更方便的輸出,我們會過載tostring函式。其實tostring不僅可以方便輸出,也可以幫助我們除錯。我們來看看未過載tostring和過載tostring的差別,效果圖如下
在未過載tostring函式時,在除錯時s1顯示的是系統預設的tostring函式,即顯示物件的型別。而我們除錯時,往往是為了看看該物件裡面的資料。為了能看到資料,我們必須將其展開才能看到,也就是屬性name、age、***。而如果我們實現了tostring函式後,直接就能看到。
下面是staff類的實現**
using system;
using system.collections.generic;
using system.linq;
using system.text;
set
}private int _***;
/// /// 性別
///
public int ***
set
}private int _age;
/// /// 年齡
///
public int age
set
}#endregion
public staff()
public staff(string name, int ***, int age)
public override string tostring()
,,歲", name, *** == 1 ? "男" : "女", age);}}
}
當物件的層級很多的時候,這種效果會更加明顯。比如我們在staff之上再加一層叫company的類,**如下
using system;
using system.collections.generic;
using system.linq;
using system.text;
set
}private staff _engineer;
/// /// 工程師
///
public staff engineer
set
}private staff _designer;
/// /// 設計師
///
public staff designer
set
}
#endregion
public override string tostring()
,工程師:,設計師:", manager, engineer, designer);}}
}
來看看未過載tostring和過載tostring的差別。
我們會看到,在未過載前,為了看到設計師的名字必須從c1中展開,再從designer中展開,然後檢視裡面的name屬性。而過載了tostring之後,點開c1就能看的到。
有時,為了在不同的配置模式下進行除錯,我們還可以在tostring過載的時候,再加入一些模式的判斷,比如debug和release模式,將company的tostring函式修改如下
public override string tostring()
,工程師:,設計師:", manager, engineer, designer);
#else
return string.format("release--經理:", manager, engineer, designer);
#endif
}
來看看效果圖
可以看到在debug和release模式下看到了不同的資料,有的專案中會有更多的配置方式,那tostring就可以做更多的變換和處理,至於如何使用就看實際需要了。
讓apk變可除錯
最近學習android逆向發現已經發布的應用基本都不能直接除錯,於是總結一下目前使用過的讓apk變成可除錯的方法。使用adb如下命令檢視default.prop檔案內容 發現ro.debuggable 0,這個屬性控制手機中的應用是否可除錯,0表示不可除錯,1表示可除錯 這裡使用mprop工具來修改...
讓愛變的有力量
本來應該回家之前些這篇部落格的。主要是反思為什麼我們寒暑假要在這裡學習,每次只是放 5天的假期,公尺老師不允許我們多一天的休息,多一天的放鬆。因為每次放假都會想想原因。都會好好的反思。有時候都不知道要加點什麼新東西了。但是這次開學來了公尺老師重新給我們衝力一次電。讓我對這幾天的假期有了新的認識。首先...
讓愛變的有力量
本來應該回家之前些這篇部落格的。主要是反思為什麼我們寒暑假要在這裡學習,每次只是放 5天的假期,公尺老師不允許我們多一天的休息,多一天的放鬆。因為每次放假都會想想原因。都會好好的反思。有時候都不知道要加點什麼新東西了。但是這次開學來了公尺老師重新給我們衝力一次電。讓我對這幾天的假期有了新的認識。首先...