㈠ 反编译会隐藏子类构造函数里面的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可以查看到
按照规范每个类最好带一个无参的构造,因为调用者如何使用你的类的方式很多,比如一些开源框架可能通过反射机制使用你的类