C#编程(十六)----------匿名类型
匿名类型
var和new关键字一起使用,可以创建匿名类型.
匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断
public class BookAsGood
{
// 定义一组私有成员变量
private string m_name;
private double m_price;
// 为成员变量设置属性
public string Name
{
get
{
return this.m_name;
}
set
{
this.m_name = value;
}
}
public string Price
{
get
{
return this.m_price;
}
set
{
this.m_price = value;
}
}
}
这只是引入了两个字段的量,如果是多个字段,代码量可想而知,所以就引入了匿名类型.
匿名类型的使用:如果要定义一个包含名字和价格的书对象.
var book = new {Name=”C#”,Price=100};
这会生成一个包含Name和Price属性的对象.
如果我们再创建一个书的对象
var bookA = new {Name=”C++”,Price=10};
其中,book和bookA的类型是相同的.我们可以这样设置:
book=bookA;
如果设置的值来自于另一个对象,例如
BookAsGood b=new BookAsGood();
var book = new {b.Pame,b.Price};
book对象有Name和Price属性.
在访问的时候可以直接和访问对象的方法一样:
Console.WriteLine(book.Name+”----”+book>price);
但是如果是这样:
book.Name=”C”;//这是错误的
尾音这里的book的各个属性只实现了get而没有实现set.所以不能赋值.为什么没有实现set?
不管怎么说,为了程序的安全性,尽量不要使用匿名类型,除非你深刻的明白匿名类型.
匿名类型和隐式类型的区别
var age=90;
我们能根据右边的表达式,出短处等号左边的变量age是int类型.这是隐式类型
var book = new { Name = "C#", Price = 100};
上面的book就是一个匿名类型。其中的Name = "C#"和Price = 100又可以分别看作是隐式类型变量。
C#编程(十六)----------匿名类型的更多相关文章
- linux网络编程之socket编程(十六)
继续学习socket编程,今天的内容会有些难以理解,一步步来分解,也就不难了,正入正题: 实际上sockpair有点像之前linux系统编程中学习的pipe匿名管道,匿名管道它是半双工的,只能用于亲缘 ...
- [十六]基础类型BigInteger简介
BigInteger和BigDecimal都是Java针对大数提供的类 超出了java的表示范围 属性简介 借助于signum和mag 来实现数据的符号位和实际数据的保存 final in ...
- Unix环境高级编程(十六)进程间通信
进程间通信(IPC)是指能在两个进程间进行数据交换的机制.现代OS都对进程有保护机制,因此两个进程不能直接交换数据,必须通过一定机制来完成. IPC的机制的作用: (1)一个软件也能更容易跟第三方软件 ...
- 编程艺术第十六~第二十章:全排列/跳台阶/奇偶调序,及一致性Hash算法
目录(?)[+] 第十六~第二十章:全排列,跳台阶,奇偶排序,第一个只出现一次等问题 作者:July.2011.10.16.出处:http://blog.csdn.net/v_JULY_v. 引言 ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- 匿名类型(C# 编程指南)
匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型. 类型名由编译器生成,并且不能在源代码级使用. 每个属性的类型由编译器推断. 可通过使用 new 运算 ...
- mysql进阶(二十六)MySQL 索引类型(初学者必看)
mysql进阶(二十六)MySQL 索引类型(初学者必看) 索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型. 在数 ...
- 学习ASP.NET Core Razor 编程系列十六——排序
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
随机推荐
- 测试开发之前端——No2.HTML5中的标签
HTML5中的标签. 标签 描述 <!--...--> 定义注释. <!DOCTYPE> 定义文档类型. <a> 定义超链接. <abbr> 定义缩写 ...
- Sublime Text 使用介绍/全套快捷键及插件推荐
如果说Notepad++是一款不错Code神器,那么Sublime Text应当称得上是神器滴哥.Sublime Text最大的优点就是跨平台,Mac和Windows均可完美使用:其次是强大的插件支持 ...
- Selenium Books
Recently, some of my projects rely heavily upon tests with selenium. Some books about selenium are c ...
- Redux架构
深入Redux架构 阅读目录 关于redux API 中间件与异步操作 异步操作的基本思路 React-Redux的用法 回到顶部 关于redux 之前写了一篇通过一个demo了解Redux,但对 ...
- ORACLE 表空间扩展方法
ORACLE 表空间扩展方法 环境: linux系统 工具:PL/SQL DEVELOPER 第一步:查看表空间的名字及文件所在位置: select tablespace_name, file_id, ...
- HTML中元素的定位方式
初中物理就学过,位置是相对的,要有参照物,因此,所有定位都是相对参照物的定位. position 属性: 规定元素的定位类型,该属性的可选值有static.relative.absolute.fixe ...
- ThreadLocal和InheritableThreadLocal使用
InheritableThreadLocal代码 public class InheritableThreadLocal<T> extends ThreadLocal<T> { ...
- 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise
Preface 为了得到更好的纹理,很多人采用各种形式的柏林噪声(该命名来自于发明人 Ken Perlin) 柏林噪声是一种比较模糊的白噪声的东西:(引用书中一张图) 柏林噪声是用来生成一些看似杂乱 ...
- JAVA 传递
其实java里面都是传值,只不过基本数据类型传的是数值,而引用类型传的是对象的地址. 作者:Intopass链接:https://www.zhihu.com/question/31203609/ans ...
- 用Thread类创建线程
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程, ...