【问题标题】:An explanation about base..ctor()关于 base..ctor() 的解释
【发布时间】:2013-04-23 08:11:38
【问题描述】:

我从朋友那里得到了一个应用程序来开发。然后在代码中我得到了这样的混乱代码:

public someNameHere()
{
   base..ctor();
} 

嗯,我从来没有这样的应用程序。我需要对此进行解释

base..ctor();

我在谷歌上搜索,找不到让我满意的答案。感谢您为我提供的任何帮助。

【问题讨论】:

  • 在我看来是语法错误
  • 在 C# 中,没有这样的语法。基类构造函数被称为public MyCtor() : base()
  • 这不会编译,不是吗?此外,我认为您不能以这种粗鲁的方式访问真正的基类 ctor。
  • 它看起来像是从反汇编程序复制的东西......无论如何,这行是不需要的,因为空的基础构造函数被隐式调用。
  • 这看起来像反编译器的输出。在 IL 中,确实像这样调用了对基类构造函数的调用。寻找更好的反编译器从你的朋友那里“获取”代码:-)

标签: c#


【解决方案1】:

.ctor() 是构造函数使用的内部名称。它在 C# 中不以这种方式使用,并且不编译。更典型的是,base..ctor() 仅在编译器执行以下操作时使用:

public class Foo : Bar {
    public Foo(string s) : base(s) {...} 
    public Foo() {...} // has an implicit :base()
}

我见过的唯一一次不同的做法是在反编译(通过反射器等)一些非 C# IL 时,它以与 C# 编译器不同的顺序执行构造代码,因此无法在 "纯”C#。在原始 IL(以及来自 C++ 等)中,您可以在构造函数中的任何位置调用基本构造函数 - 而不仅仅是在开始时。

【讨论】:

  • 那你说我朋友给了我反编译结果的源代码?
  • @HaritsFadillah 很可能;这肯定不是有效的 C#
【解决方案2】:

应该是你的基类的默认无参数构造函数。 详细说明,.ctor() 是编译 C# 时自动生成的构造函数的别名。所以写base..ctor()就是引用基类中的.ctor()方法。

【讨论】:

  • 请详细说明你的答案,而不是单行注释。
  • 提问者谷歌搜索更多信息就足够了,确定吗?
  • @Poldie 那么这就是 Stackoverflow 的意义所在吗?给出简短的答案,勉强够提问者用谷歌搜索剩下的?
  • 有时冗长而详细的答案是有意义的。其他时候,提问者显然需要阅读该主题;在这种情况下,构造函数 - 语法、使用方式和使用原因。除非您愿意就该主题编写另一篇教程,否则让他们使用相关术语搜索教程似乎是完美的答案。
  • @JustAnotherUserYouMayKnow 我同意 2
猜你喜欢
  • 2011-03-21
  • 2013-08-11
  • 1970-01-01
  • 2013-04-28
  • 2019-11-08
  • 2020-10-10
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多