本人从事.NET工作已经一段时间,毕业之前一直想着做C++的,后来因为各种原因(跟学校导师相关),走向了.NET之路,从而时不时补一下.net的基础知识,因为自己的.NET知识还不是很扎实。近期每天早上上班前都看一篇AnyTao老师的《你必须知道的.NET》系列博文(ps.非常欣赏AnyTao老师的说识风格,讲得非常细腻),故温故而知新,记录下相关知识。

  以前认识学C++,对New的认识是,凡是用了New,都是创建一个对象,对于值类型的变量是不可以用new的,只有引用类型的类型才可以用new创建一个对象,是因为C++本来就不是一个完全面向对象的语言。对于C++,用了New来创建一个对象,就意味着在堆上开了一个内存空间,并且要自己手动去释放,否则会导致内存溢出。

  对于在.NET里面的C#,New却并非如此,而且会演变出更多的功能——约束。在C#里面,New一个变量,并且就意味着在托管堆上面开辟内存,值类型也可以使用New,例如:int a = new int(),对于这样new一个变量出来,只是在堆栈(栈,其实一直想不明白为什么要叫“堆栈”而不叫栈,叫“栈”岂不是能更加明确的和“堆”分开来?!)上面初始化了一个int变量并且默认赋值为0而已。

  以下为验证小程序

namespace ForNew
{
class Program
{
static void Main(string[] args)
{
int i = new int();
Console.WriteLine(i);
Console.Read();
}
}
}

输出为:0

另外,New还可以用于泛型类里面,用于约束某个泛型必须显式带一个不带参数的构造函数,例如:

  

    class Test<T> where T : new()
{
public string str { get; set; }
}

则使用该模板类的时候,T类型必须有一个不带参数的构造函数,否则编译出错。

  这次写得有点匆促,明天再补充相关内容,有不对的地方,欢迎指出探讨。再次感谢AnyTao老师的教导,附上他《你必须知道的.NET》系列博文地址:http://www.cnblogs.com/series/2/

c# 之 New新知的更多相关文章

  1. 新知食APP架构分析--北京识物科技有限公司旗下产品

    俗话说不打无准备之仗,这次真是有点懵逼了,建议大家去面试的时候,尤其是去小型互联网公司的时候,如果你想比其他人有竞争力,那么你要研究一下当前他的公司正在开发产品,他们的业务类型是什么样的,比如他们公司 ...

  2. CDNDrive 第一个版本发布 & 布客新知第二次备份完成

    CDNDrive 第一个版本发布,新适配五个图床 https://github.com/apachecn/CDNDrive 另外,布客新知第二次备份完成 TutorialsPoint:http://i ...

  3. 所学新知——int、char型转string 类型等

    1. 利用stringstream类 定义头文件#include<sstream> 通过 int a; char b; sstream ss,ss1; ss<<a; ss1&l ...

  4. cocos2d-x项目过程记录(cocos2d-x的新知)

    1.给CCMenuItem带上点击参数(这是CCNode的一个属性) CCMenuItem *item = CCMenuItemSprite::create(unselectedPic, select ...

  5. <转>请戒掉成功学和正能量,那是麻痹人的毒药 | 新知

    非常不幸的是,这将是一场非常糟糕的演说.我不想骗你们,你们从我这里几乎什么也学不到.你们在离开的时候肯定会感到失望,你们的生活并不会得到改善. 更糟糕的是,你还会意识到生活的本质毫无意义,你的一切努力 ...

  6. 最近见到一个用react native实现的标尺动画,不知道如何实现 帖两张图(新知食App)

    很恶心,这款App的标尺没有做兼容,我在模拟上看不到效果,无法说明我想做出的东西的效果,无奈粘一张图吧! 就是这么一个屌样子,如何实现?

  7. NumPy 新知

    import numpy as np a = np.arange(5) a array([0, 1, 2, 3, 4]) 增加一个维度: b = a[:, None] c = a[:,np.newax ...

  8. 斩获新知——记一次reverse的实现过程

    最近学习C++,在实现reverse模板函数的时候,从一个小问题开始,在对这个问题的旁敲侧击当中带起了更多疑惑,顺藤摸瓜之后,尽管没有将诸多问题完美解答,但整个过程下来却也似有所获.最初的问题从使用C ...

  9. c语言新知

    C语言学得有点懈怠,昨个遇一个高手. 教了我两天,真细腻. 第一天,让我写一个程序删除字符串多余空格. 我俩代码对比   结果很显然了.

随机推荐

  1. Html的空格显示

    一.使用全角空格 全角空格被解释为汉字,所以不会被被解释为HTML分隔符,能够依照实际的空格数显示. 二.使用空格的替代符号 替代符号就是在须要显示空格的地方添�替代符号,这些符号会被浏览器解释为空格 ...

  2. [Whole Web] [AngularJS + Grunt] Using ng-html2js to Convert Templates into JavaScript

    ng-html2js takes .html templates and converts them into strings stored in AngularJS's template cache ...

  3. iostat详解

    http://www.penglixun.com/tech/system/use_iostat_analyse_linux_disks.html

  4. android中实现简单的播放

    MediaPlayer mediaPlayer1; mediaPlayer1 = MediaPlayer.create(getBaseContext(), R.raw.ic_yanyuan); med ...

  5. mysql远程连接错误提醒:2013-Lost connection to MySQL server at ‘reading initial communication packet', system error: 0

    因为没有匹配/etc/hosts.allow. 解决方法: 1.在hosts.allow 文件中添加 mysqld:ALL [root@ucDB204 ~]# cat /etc/hosts.allow ...

  6. [转]Form中控制Tab画布不同标签间切换的方法

    转自:http://yedward.net/?id=68 Form中一般常用的画布类型包括content.stacked.tab这三种,其实content类型的画布是每一个form都必须有的,而且只能 ...

  7. 1.shell之搭建Shell编程环境

    第一次写博客,加点废话,学习linux有一段时间,随着学习的深入发现自己学的不够系统,特别是遇到一些莫名的问题时,我只有各种百度,运气好时能解决掉,差时到现在还没解决,就算解决了还是不清楚是怎么解决的 ...

  8. spring quartz的触发器CrontriggerBean配置

    每一个quartz的CronTrigger表达式分为七个子表达式,每个子表达式之间用空号分割,分别是:秒 分 时 日 月 星期 年.其中年不是必须的,所以CronTrigger最少有六个子表达式. 每 ...

  9. sqlServer 求当前周的第一天和最后一天,当前月的第一天和最后一天,前三个月的第一天和今天

    ---当前周的第一天 ),DATEADD(day,-(DATEPART(weekday,GETDATE())-),GETDATE()) , )as'周一', CONVERT(varchar(),DAT ...

  10. 学习笔记_Java_day12_Cookie

    Cookie 1 Cookie概述 1.1 什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie就是一个键和一个值构成的 ...