在MSDN中,“对于引用类型,如果需要从基本类型转换为派生类型,则需要显式强制转换”。
在Wiki中,“在编程语言理论中,引用类型是指内存中的对象的数据类型。另一方面,指针类型是指内存地址。可以将引用类型视为隐式取消引用的指针。 ” 在C中就是这种情况。
在C#中考虑显式转换为引用类型时如何解释内存存储过程?
在大多数情况下,引用变量和指针变量之间实际上并没有太大的区别。两者都指向内存中的位置。引用(或指针)变量的类型告诉编译器可以使用它执行哪些操作。
代替(主要)与基本类型(例如int或byte)一起使用的C指针,应首先考虑C ++对象指针。实际上与C#几乎相同:
MyBaseClass* a = new MyBaseclass();
a->BaseMethod(); // Call method using -> operator (dereference and call)
MyBaseClass* b = new MyDerivedClass();
b->DerivedMethod(); // Error: MyBaseClass has no such method
// Proper C++-Style casting.
MyDerivedClass* c = dynamic_cast<MyDerivedClass*>(b);
// Shortcut to the above, does not do the type test.
// MyDerivedClass* c = (MyDerivedClass*)b;
c->DerivedMethod(); // Ok
这几乎将1:1转换为C#,因此(从程序员的角度来看)引用类型只是具有已定义类型的指针。唯一可见的区别是,C#中的直接C-Style强制转换等效于C ++中的try_cast,这将确保您永远不会将错误的目标实例分配给引用变量。
因此,引用类型和指向对象的指针之间的区别是(C#是托管语言这一事实暗示了其中的大多数):
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句