【问题标题】:What is base..ctor(); in C#?什么是 base..ctor();在 C# 中?
【发布时间】:2013-08-11 14:50:11
【问题描述】:

我正在反汇编一些 C# 应用程序,并尝试重构源代码。我正在反汇编应用程序以及所需的 DLL。
我不断遇到base..ctor(); 这一行,这给了我一个错误。这条线出现在StreamException 的一些子类中的一些空白处。

有人知道代码应该是什么吗?我在想反汇编程序把它搞砸了,而且它显然是无效的代码。 那么有谁知道它是什么意思以及我如何改变这条线使其工作?

这是该行所在的子类之一的代码:

[Guid("ebc25cf6-9120-4283-b972-0e5520d0000E")]
public class ZlibException : Exception
{
    public ZlibException()
    {
        base..ctor();
        return;
    }

    public ZlibException(string s)
    {
        base..ctor();
        return;
    }
}

【问题讨论】:

  • 也许this 以前的帖子会有所帮助?
  • 你也解散了构造函数吗?

标签: c# base


【解决方案1】:

应该是:

[Guid("ebc25cf6-9120-4283-b972-0e5520d0000E")]
public class ZlibException : Exception
{
    public ZlibException() : base()
    {
        return;
    }

    public ZlibException(string s) : base()
    {
        return;
    }
}

在此类的基本实现上调用具有该签名的构造函数。

但默认情况下,.NET CLR 会为您调用基本的空白构造函数,因此您实际上并不需要 : base()

【讨论】:

    【解决方案2】:

    它正在调用基本构造函数,您的反编译器只是奇怪地显示它。在IL中,构造函数被简称为.ctor,所以直接读取IL的时候,你的反编译器显然是一头雾水,认为这只是另一种方法。

    实际代码如下所示:

    public class ZlibException : Exception
    {
        public ZlibException() : base();
        {
            return;
        }
    
        public ZlibException(string s) : base();
        {
            return;
        }
    }
    

    【讨论】:

    • @ρσ˥zση 抱歉,我一开始打错了。从那以后我已经更正了。
    • 谢谢,我认为代码被混淆只是出于好奇,这个*(&(variable)) 对变量没有任何作用,对吧?我知道* 获取指针的内容,& 将变量的地址返回给上面的代码不会做任何事情,只是毫无意义的混淆代码来迷惑读者对吧?
    • @ρσ㥥zση 可能,但我真的不确定。您可以尝试将其作为另一个问题提出,但作为警告,SO 通常不会很好地回答有关混淆代码的问题。如果你想避免任何反对票,你必须仔细地表达这个问题。 BTW 你用的是什么反编译器?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2011-04-23
    • 2013-05-12
    相关资源
    最近更新 更多