引用的本质是什么(c++,c#,java)?

c++,c.c#区别 C++则一般看作是对C语言的扩展。 Java语言是一种完全的面向对象语言,虽然它的底层(运行时库)是用C语言开发的,可是并不依赖于C。 C#是微软开发的一种编程语言,语法类似Java,几乎就是从Java的翻版。 C/C++的优点在于与底层比较接近,可以控制的粒度更加精细,是开发系统级应用的最佳选择。关于缺点,我想正是源于其优点,因为它们能控制的编程元素粒度精细,所以编程比较困难,烦琐,容易出错。 ... 阅读详情

转载自:http://www.cnblogs.com/rollenholt/articles/1907408.html

在大学的时候,教材里这么说的“引用是个别名...引用作为目标的别名而使用...引用不是值不占存储空间...引用只有声明,没有定义...”
那么,引用到底占不占内存空间,引用的本质是什么?

下面举个例子:
int a = 10;
int &b = a;

这里,显然,b是一个引用。
语句“int a = 10;”,在内存中申请了一个int型变量,32位机中占4个字节,那么变量名a放哪里了呢,有些人可能会有这个疑问。
其实a代表的是一个内存地址,you know,计算机访问内存中的数据,全部是通过地址进行访问(这个结论你可以从《汇编》的寻址方式中得出)。在编译器将你的代码生成目标文件时,它会用这个地址替代所有的a,因此目标文件中也就没有变量名a了,所以,变量名a不会占用内存也就理所当然了。
那么,引用 b会不会占内存空间呢?由于受大学课本的影响(引用b只是a的别名,b其实就是a本身),我很自然的会想到,b跟a一样,在编译后,所有的b也都用a的这个地址去替代,所以b也不会占用任何内存空间。
前段时间,这个问题在快速入门群和高级专业群中各位朋友讨论了一下,大家也众说纷纭。在网上也搜到很多帖子,说引用只是一个别名,它不会占用空间。
BUT,与各位高手的交流,查看众多网站,最后得出的结论是:   引用的本质是指针,而且是常量指针,占用4个字节的空间
也就是说,“int &b = a;”会开辟一块4个字节的空间,用于存放那个地址,当然,变量名b不会占用空间。
如果你听糊涂了,没关系,记住一条:引用b,本质就是一个常量指针(当然使用时不同)


下面是网络上比较权威的说法;另外,还有都史用于验证引用占内存的实例。如果大家有什么异议,本人希望与大家多多交流。

探索c++的底层机制


在看这篇文章之前,请你先要明白一点:那就是c++为我们所提供的各种存取控制仅仅是在编译阶段给我们的限制,也就是说是编译器确保了你在完成任务之前的正确行为,如果你的行为不正确,那么你休想构造出任何可执行程序来。但如果真正到了产生可执行代码阶段,无论是c,c++,还是pascal,大家都一样,你认为c和c++编译器产生的机器代码会有所不同吗,你认为c++产生的机器代码会有访问限制吗?那么你错了。什么const,private,统统没有(const变量或许会放入只读数据段),它不会再给你任何的限制,你可以利用一切内存修改工具或者是自己写一个程序对某一进程空间的某一变量进行修改,不管它在你的印象中是private,还是public,对于此时的你来说都一样,想怎样便怎样。另外,你也不要为c++所提供的什么晚期捆绑等机制大呼神奇,它也仅仅是在所产生的代码中多加了几条而已,它远没有你想象的那么智能,所有的工作都是编译器帮你完成,真正到了执行的时候,计算机会完全按照编译器产生的代码一丝不苟的执行。你明白我在说什么吗?对了,如果你从前接触过汇编,只要你反汇编一段c++代码,你就会说:原来是这么回事呀,c++只不过是把我们的问题进行了更高层次的抽象,但只要你解开面纱,回到问题的本源,一切都将变得不再神秘……
(以下的反汇编代码均来自visial c++ 7.0) 
一.让我们从变量开始-----并非你想象的那么简单
变量是什么,变量就是一个在程序执行过程中可以改变的量。换一个角度,变量是一块内存区域的名字,它就代表这块内存区域,当我们对变量进行修改的时候,会引起内存区域中内容的改变。但是你若是学习过汇编或是计算机组成原理,那么你就会清楚对于一块内存区域来说,根本就不存在什么名字,它所仅有的标志就是他的地址,因此我们若想修改一块内存区域的内容,只有知道他的地址方能实现。看来所谓的变量一说只不过是编译器给我们进行的一种抽象,让我们不必去了解更多的细节,降低我们的思维跨度而已。例如下面这条语句:
int a=10;
按照我们的思维习惯来讲,就是“存在一个变量a,它的值是10”,一切都显得那么的自然。我们不必去在乎什么所谓的地址以及其他的一些细节。然而在这条语句的底层实现中,a已经不能算是一个变量了,它仅仅是一个标记,代表一个地址的标记:
mov dword ptr[a],0Ah;
怎么样,这条语句不像上面那条易于接受吧,因为它需要了解更多的细节,你几乎不能得到编译器的任何帮助,一切思维上的跨越必须由你自己完成。这条语句应该解释为“把10写入以a为地址的内存区域”。你说什么?a有些像指针?对,的确像,但还不是,只不过他们的过程似乎是类似的。这里所说的跨越实际上就是从一个现实问题到具体地址以及内存区域的跨越。
二.引用:你可以拥有引用,但编译器仅拥有指针(地址)
看过了第一条,你一定对编译器的工作有了一定的了解,实际上编译器就是程序员与底层之间的一个转换层,它把一个高级语言代码转换为低级语言代码,一个编译器完成的转换跨度越大,那么它也就会越复杂,因为程序员的工作都由他代为完成了。C++编译器必然比汇编编译器复杂就是这个道理。如果我问你引用和指针是一样的吗?你或许会说当然不一样了,指针容易产生不安全的因素,引用却不会,真的不会吗?我们来看下面这段代码:
int *e=new int(10);
int &f=*e;
delete e;
f=30;
你认为上面这段代码怎么样,我感觉就不很安全,它和指针有相同的隐患。因为它所引用的内存区域就不合法。
我个人认为,所谓的引用其实就是一种指针,只不过二者的接口并不相同,引用的接口有一定的限制。指针可以一对多,而引用却只能一对一,即&refer不能被改变,但却并不能说一对一就是安全的,只不过危险的系数降低罢了。引用比指针更容易控制。
Ok,下面来说说指针,曾经有过汇编经验的人一定会说,恩,指针的某些地方有些像汇编,尤其是那个“*”,怎么就那么像汇编中的“[]”啊。呵呵,的确,它也涵盖了一个寻址的过程。看来指针的确是个比较低级的东西。然而引用却并不那么直接,虽然程序员用起来方便安全了许多。但是你要清楚,只有你可以拥有引用,编译器可没有这个工具,计算机并不认识这个东西。因此,它的底层机制实际上是和指针一样的。不要相信只有一块内存拷贝,不要认为引用可以为你节省一个指针的空间,因为这一切不会发生,编译器还是会把引用解释为指针。不管你相不相信,请看下面这段代码:
int& b=a;
lea eax,[a];
mov dword ptr[b],eax;把a的地址赋给地址为b的一块内存

b=50;
mov eax,dword ptr[b];
mov dword ptr[eax],32h;

int *d=&a;
lea eax,[a];
mov dword ptr[d],eax

*d=60;
mov eax,dword ptr[d]
mov dword ptr[eax],3ch;
以上的代码均来自具体的编译器,怎么样,相信了吧,好,让我再来做一个或许不怎么恰当的比拟,你一定编过有关线性表和栈的程序吧,线性表是一个非常灵活的数据结构,在他上面有许多的操作,然而栈呢,它是一个限制性操作的线性表,它的底层操作实际上是由线性表操作实现的。就好比stack与vector的关系,因此指针和引用的关系就好比线性表和栈的关系,引用也就是受限的指针,它对外的接口和指针虽然并不一样,但底层是相同的。
下面再来看看引用的一个重要用途,作为函数的参数传递的时候是怎样的情形:
void swapr(int &a, int &b);
void swapr(int* a, int *b);

int a=10;
int b=20;

swapr(a, b);
lea eax,[a]; 
push eax; //把a的地址压入堆栈
lea ecx,[b];
push ecx;
call swapr;

swapr(&a, &b);
lea eax,[a];
push eax;
lea ecx,[b];
push ecx;
call swapr;
怎么样,用引用和指针传递参数无论是在效率上还是在空间上都是完全一样的,如果妄想不传入地址就修改实参的值,简直就是天方夜谭,这就说明引用的本质就是指针。毕竟它们的行为都太相似了,如果不是这样,你还有什么方法去实现引用吗?记住,引用只不过是编译器为你提供的一个有用且安全的工具,对于机器代码可无法表示它,它把指针一对多的缺点去除,禁止了你的不安全的操作。但回到问题的本源,他们没有任何区别。

都史的实例:

#include <iostream.h>

class A {
double *m_pDb;
};

class B {
double &m_db;
public:
B(double db = 0) : m_db(db) {}
};

int main() {
cout << "size of class A:"<<sizeof(A) << endl;
cout << "size of class B:"<<sizeof(B) << endl;
return 0;
}

结果:

size of class A:4

size of class B:4

 

补充一点:对引用要注意一定不能 //char&   rc   =   pc;                 //cannot convert from 'char *' to 'char &',
    其中char g='g';   char   *pc   =   &g;  要char & rc=*pc 才正确。 cout<<rc<<endl; 输出 g

【分析:对引用的赋值可以转换成它的本质,即给常指针赋值,但同时要进行类型检查,即char类型的引用,他不仅被赋予一个地址,同时检查这个引用绑定的对象是不是char类型的。上面语句经过检查发现绑定的对象不是char类型的而是指针类型,所以报错。】

再补充一点:c#或java中的new运算符和c++中的new运算符意义有区别,java中new返回的是一个引用,而c++返回的是一个地址。

所以java中,

B refB = new B();   //在这里开始引用了

B=null;  //这句后,垃圾回收机制计时器会自减一下,若自减到0就会自动回收内存。

当然,实际上我们编程时都可以不写B=null这一句,只不过可能回收的慢一点,因为如果refB只要可能还要被用(比如类A中定义了类B的实例,只有A的实例被释放了,对应的类B的示例才被释放),垃圾回收机制就不自减,如果refB知道程序运行完了才确定不会被用到,这块内存岂不是一直留到最后。但本质上这并不是内存泄漏,只不过释放的晚一些而已。

而在C++中,

B objectB=new B();  //这里new返回的是一个对象的地址,并把地址绑定到objectB这个变量上,这里objectB变量和int a中的a没有什么区别,对编译器来说都是代表一个地址。

delect objectB;

objectB=null;

这时候释放objectB就要显示的使用delect了,否则那块内存一直被标记为“使用中”,永远得不到释放,在整个程序运行期间永远不会被回收。另外如果objectB是个链表的头指针的话,必须得用循环深入进去一个一个节点的释放,不能只释放头节点,否则其它节点就被泄漏了,因为那些节点对应的内存被标记为使用中,实际上确不用了,所以称为内存泄漏。

 

再补充一点:java或C#中的引用本质和C++中的引用本质完全不一样,前者本质就是一个指针(非常指针,只不过所有指针由系统维护,自动及时回收内存,如引用指向改变时,系统会首先回收原先的内存,所以不会像c++那样发生内存泄漏),而c++中的引用本质是个常指针,不能够随意更改指针的内容,只能被赋值一次(初始化时)。所以java中两个引用A=B,实际上是回收引用B指向的内存,而将A和B都指向A原来指向的内存。在c++中,两个引用A=B,可以看成两个变量的别名,实际上是将变量B‘的值复制给变量A’。

另外:在c++中对象名就相当于变量名,Class stu中的stu就相当于int a中的a,stu和a都是一块内存的标记罢了。但是在C#中stu就是引用,即一个指针,stu标记的是一个大约2字节的存放指针的内存,此时stu和a不一样。所以c++中的除非显示使用&符号定义,否则不是引用,就相当于一个变量名,而在C#中不用&符合定义引用,一个对象名就是一个引用,也即一个特殊一点的指针。

C#、C++、Java、Python 选择哪个好? c语言里,就讲了三件事 件事 一个是 void *,一个是 void**, 一个是除了void的type c++也讲了两件事,一个是 pointer_holder<any> 另外一个就是 pointer_holder<any*>综合来讲,就是物以类聚,人以群分,你是谁的人,你来自何方,要往何处去。 c# 这个语言让人又爱又恨,爱的时候,当时各种前端后端的事都可以办,恨的是,就只支持windows。虽然后来跨平台了。。。晚了。现在只能靠unity 3d 在游戏端大放异彩.. 阅读详情

相关推荐

学习stm32H7之路开始(STM32H7系列1) 前期准备,HAL库框架

2020.01.07 几个重要的参考网址 1.电子工程世界网 http://tags.eeworld.com.cn/tags/STM32H7 链接: link. 2.转:https://blog.youkuaiyun.com/simon223/article/list/2?t=1 链接: link. ———————————————— 版权声明:本文为优快云博主「Simon223」的原创文章,遵循 CC 4....

kengkengkeng963的博客 3408

引用的本质

引用的本质就是一个指针常量

weixin_43200943的博客 1921

智能车视觉算法实战:十字路口与弯道拐点的精准识别

本文深入探讨了智能车视觉导航中十字路口与弯道拐点的精准识别算法。通过实战经验,详细解析了如何利用纵向巡线法生成边界数组,并从中高效提取“上拐点”与“下拐点”的关键特征。文章重点分享了提升算法鲁棒性的核心技巧,包括图像预处理、ROI设置、状态机应用及多特征融合,旨在帮助开发者实现智能车在复杂路况下从“看见”到“看懂”的稳定决策。

weixin_29061465的博客 633

引用的本质分析

引用的意义 (1)引用作为变量别名而存在,因此在一些场合可以代替指针 (2)引用相对于指针来说具有更好的可读性和实用性 #include <stdio.h> void swap(int& a, int& b) { int t = a; a = b; b = t; } int main() { int a = 1; int b = 2; swap(a, b); printf("a = %d, b = %d\n", a, b

weixin_46571142的博客 965

01. VBA从入门到精通——录制宏、窗口、快捷键

excel表功能区右击→常用→选择显示开发工具选项→确定Visual Basic:打开VBA窗口宏:查看要录制的宏录制宏:准备录制宏使用相对引用:录制宏的时候对单元格的引用做一个设置宏安全性:对宏的使用做安全设置,一般设置为禁用所有宏,并发出通知,此时打开带有宏代码的工作薄时会出现警告标记,如果宏可信就选择启动。

weixin_43812198的博客 1696

宇树智能人形机器人模块化腿部动力系统技术拆解

o电机防摔防护板(3.1.5.1)→端盖总成(3.1.5.2)→电机外壳(3.1.5.4)的冲击力传递路径;o散热风扇(3.1.3.1)推动冷风→大腿基座腔体→散热片组(3.1.5.7)→中空大腿杆排出;o防御专利:覆盖“关节热管理风道接口标准”、“抗冲击结构身份编码”;o大腿杆腔体(3.1.3.4)内置反平行四边形机构,避免连杆外露。:力传感器(3.1.8.4.2)仅部署于足端,缺失关节力矩反馈。:更换行星减速器(3.1.5.5)需拆解整个电机模块;o热量传导路径:电机定子→外壳→散热片组。

weixin_50955533的博客 1232

2020-09-25C++学习笔记引用2:二级指针形参与指针形参的使用方法和区别重难点,主看综合代码(1、指针形参2、引用形参3、二级指针形参4、指针引用形参)

2020-09-25引用2:二级指针形参与指针形参的使用方法和区别重难点 1、指针引用 #include "iostream" using namespace std; struct Teacher { char name[64]; int age; }; int getTe(Teacher **myp ) { Teacher *p = (Teacher *)malloc(sizeof(Teacher)); if (p ==NULL) { return -1; } memset(p

勿在浮沙築高台 493

CA(载波聚合)

文章目录CA基本概念1. CA分类2. Pcell、Scell以及Serving CellPcell(Primary Cell)Scell(Secondary Cell)3. Pcell、Scell部署场景场景1场景2场景3场景44. CA的协议控制4.1 Camping/Connetion Establishment:4.2 CC Management/SCell Addition/Release:4.3 Handover/Measurements:4.4 SCell激活 CA基本概念 CA也就是我们中文

你又来看我了,一起学习吧 4万+

C++的那些事:你真的了解引用吗

一、引用的本质是什么 说到引用,一般C++的教材中都是这么定义的: 1,引用就是一个对象的别名。 2,引用不是值不占内存空间。 3,引用必须在定义时赋值,将变量与引用绑定。 那你有没有想过,上面的定义正确吗?编译器是如何解释引用的? 这里先给出引用的本质定义,后面我们再进一步论证。 1,引用实际是通过指针实现的。 2,引用是一个常量指针。 3,引用在内存中占4个字节。...

weixin_34240520的博客 1211

MultiOTP Credential Provider避坑指南:从安装到RDP双因素认证的全流程解析

本文详细解析了MultiOTP Credential Provider从安装到实现RDP双因素认证(MFA)的全流程,重点分享了Docker部署、Active Directory集成及网络级认证(NLA)兼容性等环节的实战避坑经验,旨在帮助运维人员高效、稳定地部署离线双因素认证方案,提升Windows远程桌面安全性。

weixin_29255731的博客 642

某知名系统漏洞挖掘与利用思路探索

本文以安全研究为目的,分享对该套系统的代码审计和漏洞挖掘过程,文中所提到的漏洞均已提交给CNVD&CITIVD,请勿用做非法用途。

C20220511的博客 1904

【重学C++】【引用】一文看懂引用的本质与右值引用存在的意义

本文我们深入理解了引用的本质,以及学习了左值和右值的概念,还有右值引用存在的意义。对于左值和右值,我认为不需要去特别的区分,这是编译器的工作。我们更多需要做的,是

同学小张的博客 1523

RK3568平台(USB篇)USB HUB集线器

hub,集线器,连接在host与device之间的一种用于usb接口扩展的usb设备。可以将一个usb上行接口扩展为多个下行接口,使得一个host可以同时与多个device连接。一般来说,一块hub桥接芯片可扩展4个usb接口,而市面上的一拖七hub,其实使用了两块hub桥接芯片,其中一块hub桥接芯片的上行端口连接到另一块hub桥接芯片的下行端口。hub的上行端口面向host,下行端口面向device。在下行端口上,hub提供了设备接入检测和设备移除检测的能力,并给下行端口供电。

weixin_49303682的博客 964

C,C++,C#,Java?这些有什么区别?

c,c++,c#,java?这些有什么区别?   C语言: 目前最著名、最有影响、应用最广泛的windows、linux和UNIX三个操作系统都是用C语言编写的。0S是计算机系统(由软硬件两个子系统构成)的核心和灵魂,它是软件中最庞大最复杂的系统软件。既然如此庞大复杂的0S都可以用c语言编写,从狭义而言,还有什么系统软件和应用软件不能用c语言编写呢?由此可以肯定的说,c语言是一门

张小洛的BOLG 3万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C#、C++、Java、Python 选择哪个好

以Python为例,它因语法简洁、开发效率高、应用广泛而在AI、数据分析、Web开发等领域大放异彩。根据TIOBE 2024年排名,Python连续位居榜首,体现了其强大的通用性和开发者生态。/wp:image。

F36_9_的博客 5682

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C,C++,C#,java的区别

转载连接:点击打开链接 C,C++,C#,java的区别    简单地说,它们不是一种语言,语法有差别,编程时具体用到的类库或者函数库也不一样。   虽然它们不是一种语言,不过它们却也有所联系。广泛地说,C可以看作其他三种语言的源语言,因为其他三种语言几乎都是从C而来的,无论从数据类型还是控制语句看,其他三种语言都有从C得来的迹象。   其中C++则一般看作是对C语言

Jeff Li 3734

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C,C++,C#

C、C++ 和 C# 是三种不同的编程语言,虽然它们名称相似,但在设计目标、语法特性、运行环境和应用场景上有显著区别。:快速开发企业应用或跨平台桌面软件(.NET MAUI)。:需要高性能 + 面向对象(如游戏、量化交易)。:需要极致性能或底层开发(如操作系统、驱动)。// C 只能用结构体模拟。想学游戏/高性能 →。

m0_63855028的博客 2807

【总结】C++、C#、Java、Javascript、Python中引用的区别

首先分两大阵营:C++中引用是一块阵营, C#、Java、Javascript、Python中引用是另一块阵营。 之所以这样分是因为同一阵营中引用使用方法基本一样。 C++引用本质是个常量指针,而其他语言引用本质是个普通指针。也就意味着C++的引用一旦初始化(执行确定了),以后就不可再修改(不可再指向其他对象),而其他语言的引用可以随时修改指向。 具体区别:(先声明下面

Wait的专栏 1605

C、C++、C#、Java的区别和联系

简单地说,它们不是一种语言,语法有差别,编程时具体用到的类库或者函数库也不一样。 主要是应用的区域不同。 C主要用于底层开发,而C++是既面向过程又面向对象,java是完全的面向对象,主要是开发一些应用程序, C#Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点

love_you_99的专栏 1659

C、C++、C#、Java、Python保留字分类整理

在ANSI C标准中,C语言共有32个关键字,包含9种控制语句,区分大小写;C99在其基础上,新增5个关键字;C11又新增7个关键字,总共44个。Python由于不需要声明变量以及内置结构的类型,所以保留字十分精简,只有35个。ISO C++98/03关键字共63个,C++11新增10个。

微小冷的学习笔记 2591

C 语言和 C++、C# 的区别

今天突然好奇C、C++和C#这三门语言都有个C,那么它们之间到底有什么关联呢。所以就去Google了,找到了这篇文章:Understanding the Differences Between C#, C++, and C - C# Station。看完感觉写得挺好的,就打算翻译出来。 需要注意的是,本人技术十分有限,因此翻译的准确性可能有待商榷,建议有英语基础的同学,可直接阅读源站。 开始 如果你是一个有志向的程序员,那么你可能会很难决定先学哪门编程语言。世界上有相当多的编程语言,但是在C、C++和

欢迎关注,共同进步! 5936

arcgis二次开发 语言c#还是c++,c++/java/c# 几种编程语言的指针、引用比较

java 中的引用/指针,与 c++/C# 中的引用/指针不是一个概念.Java 引用,相当于 c++ 指针(fun3)。Java 引用可以赋值 null, 而 c++ 引用 (见 fun2) 不能赋值 null,c++ 指针可以赋值 null(fun3).Java 中,无 c++ 引用(fun2)对应的语法。结果引起不必要的质疑,特此,写博客,对c++/java/c# 几种编程语言的指针、引用,...

weixin_33781129的博客 1519

python和java,c++有什么不同,c++,java,python的区别在哪

大家好,小编为大家解答java,c语言,python,c++的不同之处的问题。很多人还不知道python和java,c++有什么不同,现在让我们一起来看看吧!

2301_81895949的博客 1008

C、C++、C#的区别和联系

C、C++和C#是三种具有继承关系的编程语言。C语言作为底层基础,强调硬件控制和结构化编程;C++在保留C特性的同时增加了面向对象和泛型编程;C#则基于.NET框架,采用完全面向对象和自动内存管理。三者语法相似但设计理念不同:C直接操作硬件,C++平衡性能与抽象,C#侧重开发效率。应用场景上,C多用于系统开发,C++适合高性能应用,C#则广泛应用于企业级软件。它们共同构成了从底层到高层的完整技术栈,开发者需根据项目需求选择合适的语言。

LZYself的博客 4628

C++,C#,Java中的Lambda

1)捕获列表使用 Lambda 表达式来创建匿名函数。使用 lambda声明运算符=> 从其主体中分离 lambda 参数列表。若要创建 Lambda 表达式,需要在 Lambda 运算符左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。任何 Lambda 表达式都可以转换为委托类型。Lambda 表达式可以转换的委托类型由其参数和返回值的类型定义。如果 lambda 表达式不返回值,则可以将其转换为Action委托类型之一;否则,可将其转换为Func委托类型之一。

Iamme 1534
上一篇: 着色器中语义的理解
下一篇: c#中using-添加引用-程序集(详解) 以及与 c++中include等区别
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值