c#中到底能不能继承构造函数的阿?
下面代码中public Car(int w , float g ,int p) : base(w,g)
继承的是什么东西呢?我把:base(w,g)注释掉也可以照样运行,有什么区别呢。
我是看下面这两个例子在做:
http://dev.csdn.net/article/54/54973.shtm
http://dev.csdn.net/article/54/54974.shtm他说不能继承构造函数,我不懂了using System;
class Vehicle
{
public int wheels ; //公有成员:轮子个数
protected float weight ; //保护成员:重量
public Vehicle( ){;}
public Vehicle(int w,float g)
{
wheels = w ;
weight = g ;
}
public static void Main()
{
Console.WriteLine( "交通工具的轮子个数是可以变化的!");
Console.ReadLine();
}
}
class Car:Vehicle //定义轿车类:从汽车类中继承
{
int passengers ; //私有成员:乘客数
         /*base 关键字用于从派生类中访问基类的成员: 
调用基类上已被其他方法重写的方法。 
指定创建派生类实例时应调用的基类构造函数。 
*/
public Car(int w , float g ,int p) : base(w,g)
{
wheels = w ;
weight = g ;
passengers=p ;
}
}

解决方案 »

  1.   

    base(w,g)就是调用基类的构造函数
      

  2.   

    base(w,g)是初始化基类,就不用你在当前构造函数中用base.x = w.......
      

  3.   

    当然能继承,对于你的举的例子,去除继承当然可以运行。看看我给的例子吧
    using System;
    public class MyBase
    {
       int num;   public MyBase() 
       {
          Console.WriteLine("in MyBase()");
       }   public MyBase(int i )
       {
          num = i;
          Console.WriteLine("in MyBase(int i)");
       }   public int GetNum()
       {
          return num;
       }
    }public class MyDerived: MyBase
    {
       // This constructor will call MyBase.MyBase()
       public MyDerived() : base()
       {
       }    // This constructor will call MyBase.MyBase(int i)
       public MyDerived(int i) : base(i)
       {
       }   public static void Main() 
       {
          MyDerived md = new MyDerived();
          MyDerived md1 = new MyDerived(1);
       }
    }
    输出
    in MyBase()
    in MyBase(int i)
      

  4.   

    public Car(int w , float g ,int p) : base(w,g)
    {
    passengers=p ;
    }这样写,更简洁些
      

  5.   

    public class ComImage
    {
    public System.Data.SqlClient.SqlConnection conn;
    public enum ItemType {Album,Photo};
    private int m_ImageId=0;
    private ItemType m_Type=ItemType.Photo;
    private string m_Des="";
    /// <summary>
    /// 构造器,来初始化类变量
    /// </summary>
    /// <param name="ImageId">所加入的影集的id</param>
    /// <param name="Type">图片的类型</param>
    /// <param name="Des">图片的说明</param>
    public ComImage(int ImageId,ItemType Type,string Des)
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    m_ImageId=ImageId;
    m_Type=Type;
    m_Des=Des;
    }
    public ComImage()
    {}
    }
    我的代码
      

  6.   

    X,我tm被他骗了,谢谢大伙!下午就揭帖!
      

  7.   

    using System ;
    public class ParentClass
    {
    public ParentClass( )
    {
    Console.WriteLine("父类构造函数。"); 
    }
    public ParentClass(int i)
    {
    Console.WriteLine("父类构造函数"+ i + "。"); 
    }
    public void print( )
    {
    Console.WriteLine("I'm a Parent Class。") ; 
    }
    }
    public class ChildClass : ParentClass
    {
    public ChildClass( ) //隐式继承了ParentClass(),等价于 public ChildClass():base()
    {
    Console.WriteLine("子类构造函数。"); 
    } public ChildClass(int i, int j) : base(i)
    {
    Console.WriteLine("子类构造函数" + j); 
    } public static void Main( ) 
    {
    ChildClass child = new ChildClass( ) ;
    child.print( ) ;
    child = new ChildClass(1, 2) ;
    }
    }
      

  8.   

    如果没有: base(w,g)
    则是调用系统的默认构造函数了,如果有则调用具体的构造函数.
      

  9.   

    首先弄清楚什么是继承 :)
    继承是一种机制,它使派生类可以对基类进行扩展和专用化。(SDK文档 C# 语言规范 10. 类)还要弄清楚访问修饰符(SDK文档 C# 程序员参考 可访问性级别
    声明的可访问性 意义 
    public 访问不受限制。 
    protected 访问仅限于包含类或从包含类派生的类型。 
    internal 访问仅限于当前程序集。 
    protected internal 访问仅限于从包含类派生的当前程序集或类型。 
    private 访问仅限于包含类型。 
    对于private 的构造器是不能继承的~~~~~~~~~~``
    其他的都可以~
      

  10.   

    构造函数确实不能继承 ,这不是JAVA
      

  11.   

    的确不能被调用
    initializer(可选) 
    在执行构造函数体之前调用。initializer 可以是以下带有可选的 argument-list 的两者之一:
    : base (argument-list)
    : this (argument-list)
      

  12.   

    类构造函数可通过初始值设定项来调用基类的构造函数,例如:
    public Cylinder(double radius, double height): base(radius, height)
    {
    }
    在前面的示例中,字段 radius 和 height 都是通过基类构造函数初始化的。这类似于 C++ 的初始化列表。
    类构造函数也可通过关键字 this 调用同一个类的另一个构造函数,例如:
    public Point(): this(0,20)
    {
    }他们是调用,而不是继承