ZKX's LAB

引用类型的基类 C#值类型和引用类型有什么不同?

2020-10-12知识2

C# 基类引用变量引用派生类对象问题 变量所开辟的地址取决与使用new时的对象,例如new B()中,开辟的就是对象B的空间。而A a=b;这样的代码,只是将对象首地址的指针又重新赋值给了变量a。(在这里,你可能错误的理解的引用对象的声明。引用类型的变量声明只是一个4字节的栈引用,这个引用标识着该引用地址的起始区间,也就是这个引用可以访问到的内存地址区间。而所引用的,堆栈中从“111”开始的内容并没有被改变(你有看到b.name=xxx了么?所以a所能够引用到的内容,只有id一个字段。但因为b所引用的是对象B所开辟的空间,所以有这样的伪代码也是成立的:A a=new B();B b=(B)a;这里同理,a的引用一样访问不到子类b的name属性。但是进行强转后,b是可以访问到B的name属性的,因为这两个变量a和b都是指向类B所开辟的内存空间。

引用类型的基类 C#值类型和引用类型有什么不同?

关于C++基类、派生类的引用和指针 基类的指针或2113者引用指向派生5261类的实例,这在面向对象编4102程中使用极其普遍1653。A*pA=new B;这是一个基类指针指向一个派生类的实例。B b;A&rb=b;这是一个基类引用指向(引用)派生类的实例。至于这个指针pA和引用rb的访问范围,完全由pA和rb定义所在的范围决定,跟它们所指向的目标无关。通过基类指针或者引用来访问派生类实例的意义在于,这种指针和引用可以通用于访问这个基类之下的所有派生类的对象,这一方面可以使用面向对象的“多态”特性,通过这个基类指针或者引用来调用虚函数的时候,实际执行的是派生类对象的函数,使用这个指针或者引用的一方的代码不必随着派生类的不同而改变,却可以达到执行最适合这个派生类的函数(也就是这个派生类自己的成员函数)的目的;另一方面可以使程序模块具有很好的可替换性,用一个派生类替换另一个派生类,程序的其它部分不需要做任何改动就可以正常运行而且发挥出新的派生类的特性。PS:基类指针和引用可以用来访问派生类对象是把派生类对象看成基类对象。理论基础是:一个派生类对象一定也是一个基类对象。

引用类型的基类 C#值类型和引用类型有什么不同?

C#中引用类型和值类型分别有哪些

引用类型的基类 C#值类型和引用类型有什么不同?

#派生类#指针#指针变量#引用类型#c#

随机阅读

qrcode
访问手机版