我可以从C#中的同一类的另一个构造函数调用重载的构造函数吗?
我可以从C#中的同一类的另一个构造函数调用重载的构造函数吗?
不,你不能这样做,唯一可以从C#中的另一个构造函数调用构造函数的地方紧跟在构造函数之后的“:”之后。 例如
class foo { public foo(){} public foo(string s ) { } public foo (string s1, string s2) : this(s1) {....} }
如果你的意思是你可以用C#来链接,答案是肯定的。 这个问题已经被问到。
然而,从评论看来,似乎你真正打算问的是'我可以从另一个构造函数中调用一个重载的构造函数与前/后处理吗?
尽pipeC#没有这样的语法,但是你可以用一个通用的初始化函数来做到这一点(就像你在C ++中不支持ctor链接一样)
class A { //ctor chaining public A():this(0) { Console.WriteLine("default ctor"); } public A(int i) { Init(i); } // what you want public A(string s) { Console.WriteLine("string ctor overload" ); Console.WriteLine("pre-processing" ); Init(Int32.Parse(s)); Console.WriteLine("post-processing" ); } private void Init(int i) { Console.WriteLine("int ctor {0}", i); } }
编辑:根据原post上的意见,这是一个C#的问题。
简短的回答:是的,使用this
关键字。
长答案:是的,使用this
关键字,这里是一个例子。
class MyClass { private object someData; public MyClass(object data) { this.someData = data; } public MyClass() : this(new object()) { // Calls the previous constructor with a new object, // setting someData to that object } }
在C#中,不可能从方法体内调用另一个构造函数。 你可以这样调用一个基构造器:foo(args):base()就像你自己指出的一样。 你也可以在同一个类中调用另一个构造函数:foo(args):this()。
当你想在调用基类构造函数之前做一些事情的时候,似乎基类的构造是依赖于某些外部事物的。 如果是这样,你应该通过基础构造函数的参数,而不是通过设置基类的属性或类似的东西