C# 基类引用变量引用派生类对象问题?

 我来答
星辰绯樱
推荐于2019-10-02 · TA获得超过3448个赞
知道小有建树答主
回答量:25
采纳率:12%
帮助的人:4058
展开全部

变量所开辟的地址取决与使用new时的对象,例如new B()中,开辟的就是对象B的空间。

而A a = b;这样的代码,只是将对象首地址的指针又重新赋值给了变量a。(在这里,你可能错误的理解的引用对象的声明。引用类型的变量声明只是一个4字节的栈引用,这个引用标识着该引用地址的起始区间,也就是这个引用可以访问到的内存地址区间。)

但因为b所引用的是对象B所开辟的空间,所以有这样的伪代码也是成立的:

A a = new B();

B b = (B)a;

这里同理,a的引用一样访问不到子类b的name属性。但是进行强转后,b是可以访问到B的name属性的,因为这两个变量a和b都是指向类B所开辟的内存空间。

引用变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,引用变量通常是可变的;但在纯函数式语言中,变量可能是不可变的。

⒈pt 是引用变量,申明引用变量时必须将其初始化.pt 和rate 的值指向相同的内存变量. 引用的最多用处就是作为函数的参数(结构和对象).通过引用变量作参数可以是函数使用原始数据.而不是拷贝.

⒉引用的特点更接近于const 指针,一旦与某个变量关联起来就将一直效忠于它,可以通过初始化来设置此时,rate的值和 pt的值都改为了30 但是地址还是原来rate的地址.而不是other的地址.

⒊如果程序不想改变传递给它的信息,但是又想使用引用,那么则应该使用常量引用

达内
2021-04-07 · 百度认证:教育领域创作者
达内
向TA提问
展开全部

本视频主要从Java语言基础、JavaSE核心、WEB全栈及数据库、Servlet/Jsp核心、 Java框架五个阶段进行讲解。在本教程中,会让大家从零基础快速掌握Java知识。想要配套学习资料的小伙伴可以联系我哦!

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式