㈠ 反編譯會隱藏子類構造函數裡面的super()語句嗎
反編譯本來就不能保證100%還原的,循環/遞歸/調用嵌套過多的還會出現goto語句呢
㈡ Flash反編譯問題,用碩思閃客精靈,遇到了一個被ZLib壓縮的swf文件 反編譯後幾乎看不到東西 求解
正版的閃客精靈也搞不定樓主的問題
樓主需要ASV2011來提取裡面的真實swf
不過這個軟體注冊費用幾百元 破解版又找不到的
而且只有2011版的才有這個功能,老版本的沒有
㈢ 為什麼C#寫的程序用Reflector打開 反編譯後 就只能夠看到方法,方法裡面的代碼全被影藏了,要不就是然會 0
可能代碼被混淆過。
或者就的確返回了0
㈣ C# 構造函數到底是什麼,請用有構造函數的.cs文件舉例說明吧
SqlParameter[] parameters = {
new SqlParameter("@UID", SqlDbType.NVarChar,100),
new SqlParameter("@PID", SqlDbType.Int,4)
};
你代碼里就有一個有用的例子
在你實例話SQLPARAMETERS的時候,構造函數當中傳遞了3個參數,可以直接對對象的屬性賦值,當然了,你也可以用對象.屬性=的形式去完成賦值!
舉例說明一下吧,當你需要用到一個用於數據訪問的底層抽象類的時候,一個業務當中需要用到多個資料庫聯系起來,那麼你怎麼做到讓這個底層類去支持動態的配置連接字元串?
這個時候你就可以採用訂制一個類的靜態欄位,然後構造函數當中對這個欄位賦值,那麼當你訪問這個對象的時候,就可以使用你想要的字元連接串了!
public class demo
{
private static string connstr;
public demo(string str)
{
this.connstr=str;
}
\\用於訪問資料庫的靜態方法
}
用的時候就
demo dm=new demo("連接字元串")
dm.方法
這個樣子的!構造函數的功用只能說在通常的應用當中被發現的。。。。當然了可能我舉的例子不全面,寫的多了,你就會發現以後太多的地方需要用到這個東西了,多多理解面向對象的含義吧!
至於你說的那個空構造函數,那個是默認的,你就是刪了,編譯器也會為你加上去,你的程序執行的時候並不是執行.CS文件,而是CS文件被編譯後的程序集,你可以反編譯出來你的DLL,就可以看到雖然.CS文件中沒有默認構造函數,編譯後也會被加上去的!
㈤ doapk為什麼提示反編譯成功但卻什麼文件都沒有生成
要把文件放到doapk的文件夾里,還要把反編譯後存放的目錄設置成doapk的文件夾。
立即提示反編譯成功實際上是失敗了,反編譯需要較長時間
http://bbs.shen.com/thread-2074183-1-1.html
㈥ java子類構造函數初始化問題
剛剛想當然的回答了一個3,然後發現不妥,試了一下果然不對,就可恥的把回答刪除了,刪除後居然不能重新回答,果斷重新注冊個號回答
首先我們加上點東西
publicclassDemo10{
publicstaticvoidmain(String[]args){
newJoo();
}
}
classIoo{
inta=3;
publicIoo(){
System.out.println("Ioo構造方法執行");
System.out.println("Ioo中this類型為:"+this.getClass().getSimpleName());//查看this是什麼類型
this.t();
System.out.println("Ioo構造方法執行完畢");
}
publicvoidt(){
System.out.println("執行Ioo的t方法");
System.out.println(this.a);
System.out.println("Ioo中的t方法執行完畢");
}
}
classJooextendsIoo{
intb=3;
publicJoo(){
System.out.println("Joo構造方法執行完畢");
}
@Override
publicvoidt(){
System.out.println("執行Joo中的t方法");
System.out.println(this.b);
System.out.println("Joo中的t方法執行完畢");
}
}
輸出結果為:
-------------------------------------
Ioo構造方法執行
Ioo中this類型為:Joo
執行Joo中的t方法
0
Joo中的t方法執行完畢
Ioo構造方法執行完畢
Joo構造方法執行完畢
-------------------------------------
為什麼輸出的是0呢?又為什麼Ioo中this的類型會是Joo呢?
接下來我們反編譯一下class文件
classIoo{
inta;
publicIoo(){
a=3;
System.out.println("Ioo構造方法執行");
System.out.println("Ioo中this類型為:"+getClass().getSimpleName());
t();
System.out.println("Ioo構造方法執行完畢");
}
publicvoidt(){
System.out.println("執行Ioo的t方法");
System.out.println(a);
System.out.println("Ioo中的t方法執行完畢");
}
}
classJooextendsIoo{
intb;
publicJoo(){
b=3;
System.out.println("Joo構造方法執行完畢");
}
publicvoidt(){
System.out.println("執行Joo中的t方法");
System.out.println(b);
System.out.println("Joo中的t方法執行完畢");
}
}
我們可以看出,成員變數的賦值操作是放到了構造方法中執行的,我們根據控制台輸出語句的順序來模擬java的執行順序,由於我們實例化的是子類Joo,他會首先執行父類的構造方法,我們先來看執行順序
a賦值為3
輸出"Ioo構造方法執行"
由於this代表當前對象,那麼既然是實例化Joo時調用的方法,this代表的就是Joo,故輸出Joo
執行t方法(由於class反編譯後,this.被簡化了,所以我們觀察源代碼,this.t(),既然this的類型是Joo,那麼this.t()執行的就是Joo中的t方法)。此時控制台輸出"執行Joo中的t方法"
此時應該執行System.out.println(b),我們想當然的以為應該是3,結果卻輸出了0,原因是這樣:我們在Joo的構造方法中加入了輸出語句,可是在控制台,此時並沒有輸出"Joo構造方法執行完畢",可見Joo的構造方法並沒有執行,就是b = 3的賦值語句同樣沒有執行,此時的b默認值為0,故控制台輸出了0。
此時t方法執行完畢,輸出"Joo中的t方法執行完畢",Ioo的構造方法也執行完畢,輸出"Ioo構造方法執行完畢"
父類Ioo的構造方法執行完畢,最後執行子類Joo的構造方法,我們看到,此時的b才被賦值為3,最後輸出"Joo構造方法執行完畢"
至此,模擬完成,有不懂的可以再hi我,不要hi這個號,這號只是為了臨時回答注冊的,如無意外,不會再上,我常用的叫kq346635081,在這條回答的評論里
㈦ 孫鑫的《VC++ 深入詳解》關於「編譯器合成的默認構造函數」有錯誤!
你得到的事實並不能證明什麼。
你單純定義了一個類,它的默認構造函數什麼都不會做,編譯運行,什麼結果你都看不到。
你可以定義一個父類,一個子類,然後在父類里寫一個構造函數,在裡面列印一句話。
然後在main里,定義一個子類的對象,看能否輸出內容。
也就是:
#Include <stdio.h>
class testClassA
{
public:
testClassA(){ printf("testClassA\n"); }
int iVal;
};
class testClassB : testClassA
{
int iValb;
}
void main()
{
testClassB bTest;
}
㈧ 寫的一個c++ string類的構造函數部分 然後發現編譯的時候沒報錯 運行了之後編譯器掛了 麻煩大神看看
問題在operator=()
String& operator=(const String& s)
{
if (this != &s)
{
delete[] pstr;
pstr = s.pstr; //這是個淺拷貝,造成交叉鏈接,兩個指針指向同一個地方了
}
和拷貝構造函數一樣,要進行深拷貝,改了下:
.......
String& operator=(const String& s)
{
if (this != &s)
{
delete[] pstr;
pstr = new char[strlen(s.pstr) + 1];
strcpy_s(pstr, strlen(s.pstr) + 1, s.pstr); //用拷貝字元串的函數
}
return *this;
}
......
㈨ c#默認的無參構造函數的代碼在哪裡可以看到
你用反編譯工具reflector可以查看到
按照規范每個類最好帶一個無參的構造,因為調用者如何使用你的類的方式很多,比如一些開源框架可能通過反射機制使用你的類