C#中的隐式类型var——详细示例解析
2024-10-12 22:39:31
从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var。隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出。
下面就让我来总结下隐式类型的一些特点:
1.var类型会被编译器根据初始值的类型推断出具体的类型
eg:
var t="test";//var会被推断为string类型
var p=new Person();//已知Person为一个已定义好的类,编译完成后代码会变成: Person p =new Person();
2.var类型的局部变量必须赋予初始值
eg:
var t=;//正确,t会被推断为int类型,值为1
var t;//报错:隐式类型的局部变量必须已初始化
3.无法将null赋值给隐式类型的局部变量
eg:
var t=null;//报错:无法将"<null>"赋予隐式类型的局部变量
4.var类型变量的定义必须是在方法中或者在属性get、set访问器中
eg:
public void Test()
{
var t="test";//正确
} public string Name
{
get
{
var p = new Person();//正确 return p.Name;
}
} class Program
{
var t = ;//报错:上下文关键字"var"只能出现在局部变量声明中
}
5.var不能用作方法的参数
eg:
public void Test(var t){}//报错:上下文关键字"var"只能出现在局部变量声明中
6.不能当做返回值类型
eg:
public var Test(){}//报错:并非所有代码路径都返回值 或者:上下文关键字"var"只能出现在局部变量声明中
7.语句中只声明一次变量,声明后不能更改类型
eg:
var t="";
t=;//报错:无法将类型"int"隐式转换为"string"
8.初始化不能是一个匿名方法(也叫匿名委托、匿名函数,通俗上可以这样说,并非官方的规范,后续博文讲匿名方法的会顺带提一下)
eg:
var t = delegate(int i) { return i; };//报错:无法将"匿名方法"赋予隐式类型的局部变量
9.可以用匿名类初始化
eg:
var person = new { Age = , Name = "Kobe" };//正确
//匿名类中的属性一定要赋初始值,否则报错
var person = new { Age, Name };//报错:当前上下文中不存在"Age" 当前上下文中不存在"Name"
使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样,因为还没运行时编译器就已经根据上下文推断出是什么类型了,所以要比object效率要高。善用隐式类型,在难以确定类型的情况下如将用于存储匿名类型或匿名类型集合时使用会有奇效,在新语法中的使用颇多,是一把编程利器。
最新文章
- Quartz2.0以上版本的单机和集群
- [网站性能2]Asp.net平台下网站性能调优的实战方案
- Android菜鸟成长记9 -- selector的用法
- 再读GFS论文
- (转)深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0
- 使用jQuery基本过滤选择器
- YTU 2974: C语言习题5.26--文件操作3
- SqlDataAdapter怎么处理事务呢
- ASP.NET验证控件RegularExpressionValidator的常见表达式
- ext3文件系统基础
- 51nod1079中国剩余定理
- JavaScript单例模式
- js中State模式的解析及运用
- C#中假设正确使用线程Task类和Thread类
- Python线性表——单链表
- PHP中的加强型接口Traits
- 【错误记录】PowerShell 超级无语的语法错误(令人怀疑人生)
- Ajax进阶 FormData对象
- pip in windows
- Android分享---调用系统自带的分享功能
热门文章
- 远程访问jupyter notebook
- fineui刷新父页面
- std::unique_lock<;std::mutex>; or std::lock_guard<;std::mutex>; C++11 区别
- C语言中,while()语句中使用赋值语句
- Linux C 信号 pause、sigsuspend 的相同与区别
- java程序员快速掌握python系列——概述
- BLAST套件
- 模板化的七种排序算法,适用于T* vector<;T>;以及list<;T>;
- Boost正则表达式的编译与使用方法集
- 读取图像,LUT以及计算耗时