基础知识:关于base..ctor()的解释

9

我从朋友那里得到了一个要开发的应用程序。但是在代码中,我遇到了如下令人困惑的代码:

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

这是我从未遇到过的一种应用程序。我需要对此进行解释。

base..ctor();

我已经搜索了谷歌,但找不到满意的答案。感谢您提供的任何帮助。


2
在C#中,没有这样的语法。基类的构造函数像public MyCtor() : base()一样被调用。 - J. Steen
这个代码不会编译,是吧?另外,我认为你不能用这种粗鲁的方式访问基类的真正构造函数。 - Tommi
2
看起来像是从反汇编器复制的东西...无论如何,这行不需要,因为空的基础构造函数会被隐式调用。 - Egor4eg
这看起来像是反编译器的输出结果。在IL中,调用基类构造函数确实是以这种方式进行的。寻找一个更好的反编译器来“获取”你朋友的代码吧 :-) - dtb
看起来像是MSIL语法。也许这是直接用MSIL编写的代码? - Oleksandr Kobylianskyi
显示剩余2条评论
2个回答

22

.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++等语言),可以在构造函数中的任何位置调用基类构造函数,而不仅仅是在开头。


那么在这种情况下,你是说我的朋友给了我反编译结果的源代码? - Harits Fadillah
@HaritsFadillah 可能性很大;那肯定不是有效的C#。 - Marc Gravell

3

应该是你的基类默认构造函数。更详细地说,.ctor() 是 C# 编译器自动生成的构造函数的别名。因此,编写 base..ctor() 是在引用基类中的 .ctor() 方法。


5
请详细说明您的答案,而不仅仅是一行简短的评论。 - JustAnotherUserYouMayKnow
问题提出者自己谷歌搜索更多信息就足够了,不是吗? - user146043
5
这是 Stackoverflow 的宗旨吗?提供简短的答案,只足够让提问者能够用谷歌搜索到更多信息? - JustAnotherUserYouMayKnow
有时候,提供一份详尽的答案是有意义的。但在其他情况下,提问者显然需要阅读相关主题的资料,比如构造函数——语法、用途和原因。除非你有能力再写一篇关于这个主题的教程,否则让他们使用相关术语搜索已有的教程似乎是最完美的答案。 - user146043
@JustAnotherUserYouMayKnow 我同意2。 - Harits Fadillah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接