using System;namespace xumh
{
public class MyClass
{
public MyClass()
{
Console.WriteLine("MyClass:默认构造函数");
}
public MyClass(int a, int b)
{
Console.WriteLine("MyClass带参构造:a={0}, b={1}.", a, b);
}
}
public class MyClass2 : MyClass
{
public MyClass2()
{
Console.WriteLine("MyClass2:默认构造函数");
}
public MyClass2(int a, int b)
{
Console.WriteLine("MyClass2带参构造:a={0}, b={1}.", a, b);
}
} public class MyClass3 : MyClass2
{ public MyClass3()
{
Console.WriteLine("MyClass3:默认构造函数");
}
public MyClass3(int a, int b)
{
Console.WriteLine("MyClass3带参构造:a={0}, b={1}.", a, b);
}
} public class runMyApp
{
static void Main()
{
MyClass3 my = new MyClass3(3,4);
}
}
}输出如下:
MyClass:默认构造函数
MyClass2:默认构造函数
MyClass3带参构造:a=3, b=4.我想输出顺序为 MyClass3-MyClass2-MyClass1 Java 的顺序
有无办法?
{
public class MyClass
{
public MyClass()
{
Console.WriteLine("MyClass:默认构造函数");
}
public MyClass(int a, int b)
{
Console.WriteLine("MyClass带参构造:a={0}, b={1}.", a, b);
}
}
public class MyClass2 : MyClass
{
public MyClass2()
{
Console.WriteLine("MyClass2:默认构造函数");
}
public MyClass2(int a, int b)
{
Console.WriteLine("MyClass2带参构造:a={0}, b={1}.", a, b);
}
} public class MyClass3 : MyClass2
{ public MyClass3()
{
Console.WriteLine("MyClass3:默认构造函数");
}
public MyClass3(int a, int b)
{
Console.WriteLine("MyClass3带参构造:a={0}, b={1}.", a, b);
}
} public class runMyApp
{
static void Main()
{
MyClass3 my = new MyClass3(3,4);
}
}
}输出如下:
MyClass:默认构造函数
MyClass2:默认构造函数
MyClass3带参构造:a=3, b=4.我想输出顺序为 MyClass3-MyClass2-MyClass1 Java 的顺序
有无办法?
我只能告诉你一点,Java绝对不可能是这个顺序——子类的构造函数在基类的之前调用。如果你非要坚持这一点,请你给出Java代码。
想必你对JAVA同样也是一窍不通。
如果你觉得JAVA是那样的,就出代码吧。
我想问问c#怎么设置为这个顺序。class MyClass2 extends MyClass1{
public function MyClass2(a:int,b:int):void{
trace("myclass2");
super(a,b);
}
}
-----
完整测试代码as3 package
{
import flash.display.Sprite; public class Main extends Sprite
{
public function Main()
{
new MyClass3(1, 2);
}
}
}
class MyClass1{
public function MyClass1(a:int,b:int):void{
trace("myclass1");
}
}
class MyClass2 extends MyClass1{
public function MyClass2(a:int,b:int):void{
trace("myclass2");
super(a,b);
}
}
class MyClass3 extends MyClass2{
public function MyClass3(a:int,b:int):void{
trace("myclass3");
super(a,b);
}
}
C#中应该实现不了。
public MyClass2(int a, int b)
{
Console.WriteLine("MyClass2带参构造:a={0}, b={1}.", a, b);
}
等价于
public MyClass2(int a, int b):base()
{
Console.WriteLine("MyClass2带参构造:a={0}, b={1}.", a, b);
}
也就是说MyClass2的构造函数会先执行子类的构造函数的。
我有个方法也许能实现楼主的需求: public class MyClass
{
public MyClass()
{
Constructor();
}
protected virtual void Constructor()
{
Console.WriteLine("MyClass:默认构造函数");
}
}
public class MyClass2 : MyClass
{
protected override void Constructor()
{
Console.WriteLine("MyClass2:默认构造函数");
base.Constructor();
}
}
public class MyClass3 : MyClass2
{
protected override void Constructor()
{
Console.WriteLine("MyClass3:默认构造函数");
base.Constructor();
}
}
public class runMyApp
{
static void Main()
{
MyClass3 my = new MyClass3();
}
}这样输出顺序就是MyClass3-MyClass2-MyClass1了。
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{
class A
{
protected A()
{
} protected virtual void OnInit()
{
Console.WriteLine("A.Init()");
} public static A CreateInstance()
{
A a = new A();
a.OnInit();
return a;
}
} class B : A
{
protected B()
{
} protected override void OnInit()
{
Console.WriteLine("B.Init()");
base.OnInit();
} public static new B CreateInstance()
{
B b = new B();
b.OnInit();
return b;
}
} class C : B
{
protected C()
{ } protected override void OnInit()
{
Console.WriteLine("C.Init()");
base.OnInit();
} public static new C CreateInstance()
{
C c = new C();
c.OnInit();
return c;
}
} class Program
{
static void Main(string[] args)
{
C c = C.CreateInstance();
}
}
}C.Init()
B.Init()
A.Init()
Press any key to continue . . .