首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

【入门】c#中的多层承袭顺序和java的不一样,怎样才能一样

2013-09-08 
【入门】c#中的多层继承顺序和java的不一样,怎样才能一样?using Systemnamespace xumh{public class MyClas

【入门】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 的顺序
有无办法?
[解决办法]

引用:
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了。

热点排行