C#中基类和派生类之间的类型转换的内部原理是什么
答案:3 悬赏:70 手机版
解决时间 2021-03-26 15:32
- 提问者网友:我是女神我骄傲
- 2021-03-26 00:45
C#中基类和派生类之间的类型转换的内部原理是什么
最佳答案
- 五星知识达人网友:青灯有味
- 2021-03-26 02:04
内部原理?不就是隐式转换吗简单来说,派生类一定可以隐式转换为基类,因为派生类是继承基类过来的,所有基类有的定义它都会有,所以这样的隐式转换是被认为合法的,比如:class A { .... }class B:A {....} A aInstance=new B(); 但是基类类型不能隐式转换为派生类,因为派生类中的成员定义在基类中是不一定存在的,如下面这样的转换是无法通过的:B bInstance=new A(); //不能从基类隐式转换到派生类 当你确实知道一个类型为A的变量实际上是派生类B时,可以通过强制类型转换为派生类:A a=new B();........B b=(B)a;
全部回答
- 1楼网友:神也偏爱
- 2021-03-26 02:51
继承
- 2楼网友:零点过十分
- 2021-03-26 02:20
在类的层次结构中(即继承结构中)基类和派生类的构造函数的使用方式。派生类对象的初始化由基类和派生类共同完成:基类的成员由基类的构造函数初始化,派生类的成员由派生类的构造函数初始化。 当创建派生类的对象时,系统将会调用基类的构造函数和派生类的构造函数,构 造函数的执行次序是:先执行基类的构造函数,再执行派生类的构造函数。如果派生类又有对象成员,则,先执行基类的构造函数,再执行成员对象类的构造函数,最后执行派生类的构造函数。至于执行基类的什么构造函数,缺省情况下是执行基类的无参构造函数,如果要执行基类的有参构造函数,则必须在派生类构造函数的成员初始化表中指出。如:class A
{ private int x;
public A( ) { x = 0; }
public A( int i ) { x = i; }
};class B : A
{ private int y;
public B( ) { y = 0; }
public B( int i ) { y = i; }
public B( int i, int j ):A(i) { y = j; }
};B b1 = new B(); //执行基类A的构造函数A(),再执行派生类的构造函数B()
B b2 = new B(1); //执行基类A的构造函数A(),再执行派生类的构造函数B(int)
B b3 = new B(0,1); //执行执行基类A的构造函数A(int) ,再执行派生类的 构造函数B(int,int) 在这里构造函数的执行次序是一定要分析清楚的。另外,如果基类A中没有提供无参构造函数public A( ) { x = 0; },则在派生类的所有构造函数成员初始化表中必须指出基类A的有参构造函数A(i),如下所示:class A
{ private int x;
public A( int i ) { x = i; }
};class B : A
{ private int y;
public B():A(i) { y = 0; }
public B(int i):A(i) { y = i; }
public B(int i, int j):A(i) { y = j; }
};
{ private int x;
public A( ) { x = 0; }
public A( int i ) { x = i; }
};class B : A
{ private int y;
public B( ) { y = 0; }
public B( int i ) { y = i; }
public B( int i, int j ):A(i) { y = j; }
};B b1 = new B(); //执行基类A的构造函数A(),再执行派生类的构造函数B()
B b2 = new B(1); //执行基类A的构造函数A(),再执行派生类的构造函数B(int)
B b3 = new B(0,1); //执行执行基类A的构造函数A(int) ,再执行派生类的 构造函数B(int,int) 在这里构造函数的执行次序是一定要分析清楚的。另外,如果基类A中没有提供无参构造函数public A( ) { x = 0; },则在派生类的所有构造函数成员初始化表中必须指出基类A的有参构造函数A(i),如下所示:class A
{ private int x;
public A( int i ) { x = i; }
};class B : A
{ private int y;
public B():A(i) { y = 0; }
public B(int i):A(i) { y = i; }
public B(int i, int j):A(i) { y = j; }
};
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯