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 ;
}
}
下面代码中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 ;
}
}
解决方案 »
- xml文件的导入导出
- 异常信息:未指定的错误 在线等高手赐教
- .Net 學到現在,只有一樣不會。
- VS2005连接数据库的问题,真是奇怪以前还好好的大家来看看吧
- 关于用ASP.net的两个新手级别的问题,希望各位大虾帮忙解答
- .net的TreeView控件中,TreeNodeSrc属性的值只能是文件名吗?
- DropDownList数据邦定问题(20分)
- MvcPager在Mvc4里不能无刷新分页吗?
- 请教后台改变REPEATER控件中按钮颜色的方法
- 可否讨论一下是尽可能使用HTML Form还是尽可能使用Web From?
- 为什么我的 net每次启动都要提示
- Response.Write("<meta http-equiv=refresh content='5;URL=Default.aspx'>");这句话,要是转到别的框架页里面,应该怎么写啊?
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)
{
passengers=p ;
}这样写,更简洁些
{
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()
{}
}
我的代码
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) ;
}
}
则是调用系统的默认构造函数了,如果有则调用具体的构造函数.
继承是一种机制,它使派生类可以对基类进行扩展和专用化。(SDK文档 C# 语言规范 10. 类)还要弄清楚访问修饰符(SDK文档 C# 程序员参考 可访问性级别
声明的可访问性 意义
public 访问不受限制。
protected 访问仅限于包含类或从包含类派生的类型。
internal 访问仅限于当前程序集。
protected internal 访问仅限于从包含类派生的当前程序集或类型。
private 访问仅限于包含类型。
对于private 的构造器是不能继承的~~~~~~~~~~``
其他的都可以~
initializer(可选)
在执行构造函数体之前调用。initializer 可以是以下带有可选的 argument-list 的两者之一:
: base (argument-list)
: this (argument-list)
public Cylinder(double radius, double height): base(radius, height)
{
}
在前面的示例中,字段 radius 和 height 都是通过基类构造函数初始化的。这类似于 C++ 的初始化列表。
类构造函数也可通过关键字 this 调用同一个类的另一个构造函数,例如:
public Point(): this(0,20)
{
}他们是调用,而不是继承