回 帖 发 新 帖 刷新版面

主题:我想重用基类构造函数,应该怎么做呢

/*
以下程序,烦请大家帮我看一下,相关解释和问题我标注在注释里了 
 * 不知道我这样表述是否清楚,如有不清楚的地方,欢迎大家给意见
*/
using System;
using System.Collections.Generic;
using System.Text;

namespace MusicManagement
{

    public class Base
    {
        public Base()
        { 
        }

        //这个函数,我希望几个派生类都可以重用
        public Base(string path, string postfix)
        {
            /*里面的代码是派生类Sub1,Sub2的构造函数都想使用的,但又
             不希望每个派生类都得为此而都再把类似的代码拷贝一遍,
             * 我该怎么实现呢?
             * */
        }

        
    }

    public class Sub1 : Base
    {
        public Sub1()
        {
        }
        [STAThread]
        static void Main()
        {
            /*
             此处进行强制类型转换,在运行时会报错,
             * 报错强制类型转换失败
             */
            Sub1 Sub1 = (Sub1)new Base("a", "b");
            Sub2 Sub2 = (Sub2)new Base("a", "b");
        }
    }

    public class Sub2 : Base
    {
        public Sub2()
        {
        }
    }
}

回复列表 (共10个回复)

沙发

比如:

public Sub2() : base("a", "b"){
}

板凳


[em2]你可以先建立一个类!
class Badir{
 public:
....
private:
....
}
就可以了

3 楼

[quote]
[em2]你可以先建立一个类!
class Badir{
 public:
....
private:
....
}
就可以了[/quote]
不明白你所说的,能够在我的代码上做修改示范一下吗?

4 楼

[quote]比如:

public Sub2() : base("a", "b"){
}[/quote]
不明白你所说的,能够在我的代码上做修改示范一下吗?

5 楼

。。。。
我写的就是继承父类构造函数的子类构造函数实现方法~~~~

6 楼

class Basiz
{
....
};
basiz::basiz(...){}
basiz::basiz(..){}
这样就可以了。

7 楼

具体的说就是:
public Sub2(参数1,参数2) : base("a", "b")
{
}

8 楼

如果你的基类构造函数里面的代码不全是派生类所必须的,可以把派生类所须的代码单独在基类里建一个private 函数,然后,派生类构造函数调用此函数。

9 楼

public class sub1:base
{
   public sub1(string x,string y)
   {
     base(x,y);
   }
}
或者:
public class sub1:base
{
   public sub1(string x,string y):base(x,y)
   {
   }
}
都可以

10 楼


using System;

namespace ConsoleApplication1
{


        public class Base
        {
            public Base()
            { 
                
            }

            //这个函数,我希望几个派生类都可以重用
            public Base(string path, string postfix)
            {
                /*里面的代码是派生类Sub1,Sub2的构造函数都想使用的,但又
                 不希望每个派生类都得为此而都再把类似的代码拷贝一遍,
                 * 我该怎么实现呢?
                 * */
                
            }

        
        }

        public class Sub1 : Base
        {
            
            public Sub1(string path,string postfix):base(path, postfix)
            {
                
            }
            [STAThread]
            static void Main()
            {
                /*
                 此处进行强制类型转换,在运行时会报错,
                 * 报错强制类型转换失败
                 */
                
                Sub1 Sub1 = (Sub1)new Base("a", "b");
                Sub2 Sub2 = (Sub2)new Base("a", "b");
                //Base b1=new Base();
                //Base b2=new Sub1("a","b");
                //Base b3=b2;
                //Sub1 s1=new Sub1("a","b");
                //b2 和s1都先调用Base的带参数的构造函数 然后再调用自己的带参数的构找函数
            }
        }

        public class Sub2 : Base
        {
            public Sub2(string path,string postfix):base(path,postfix)
            {
                
            }
        }
    
}
//在你想得到那样的基础上
//Sub1 Sub2 的构造函数必须要写和Base里面的参数相同 但是构造函数的内容可以不同

我来回复

您尚未登录,请登录后再回复。点此登录或注册