【入门】c#中的多层继承顺序和java的不一样,怎样才能一样?
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 的顺序
有无办法?
[解决办法]
我只能告诉你一点,Java绝对不可能是这个顺序——子类的构造函数在基类的之前调用。
如果你非要坚持这一点,请你给出Java代码。
[解决办法]
as3是flash编程语言,不是java。
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的构造函数会先执行子类的构造函数的。
[解决办法]
就如u011303459所说,.Net中基类实例构造函数就是会先于子类的实例构造函数执行,这个应该没法更改。
我有个方法也许能实现楼主的需求:
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了。