本人从事.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而已。

  以下为验证小程序

  1. namespace ForNew
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. int i = new int();
  8. Console.WriteLine(i);
  9. Console.Read();
  10. }
  11. }
  12. }

输出为:0

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

  

  1. class Test<T> where T : new()
  2. {
  3. public string str { get; set; }
  4. }

则使用该模板类的时候,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. java 5 线程池

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Thr ...

  2. 【C++】第 1 章:C++基础知识

    C++历史简介 1.Java和C#语言都是从C++继承而来的.简而言之,要成为专业的编程人员就意味着要深刻理解C++.它是现代编程的基础. C:现代编程时代的开始 1.C语言的发展经历了20世纪60年 ...

  3. [React] Using the classnames library for conditional CSS

    Classnames is a simple yet versatile javascript utility that joins CSS class names based on a set of ...

  4. Codeforces 439D Devu and his Brother 三分

    题目链接:点击打开链接 = - =曾经的三分姿势不对竟然没有被卡掉,,,太逗.. #include<iostream> #include<string> #include< ...

  5. Android学习站点推荐

    收集了一些比較好的Android学习站点,希望对大家有所帮助: 1.http://developer.android.com/ Android官方站点,可惜被屏蔽了,须要使用FQ软件 2.http:/ ...

  6. MantisBT

    官方网站:http://www.mantisbt.org/ MantisBT is a free popular web-based bugtracking system (feature list) ...

  7. Java基础知识强化之IO流笔记59:打印流

    1. 打印流 (1)分类: • 字节打印流   PrintStream • 字符打印流   PrintWriter (2)打印流的特点: • 只能写数据,不能读数据 • 只能操作目的地,不能操作数据源 ...

  8. jedis访问redis学习笔记

    最近在学习redis,在网上查了些文章,利用他人已有的知识,总结写下了这篇文章,大部分内容还是引用别人的文章内容.经过测试发现spring-data-redis现在有的版本只能支持reids 2.6和 ...

  9. hibernate篇章四-- Hibernate配置文件中hiberante.hbm2ddl.auto四个参数的配置

    我们在搭建环境的时候,在配置文件中有一个属性标签为: <property name="hibernate.hbm2ddl.auto">     </propert ...

  10. iOS9 UITableViewCell separatorInset设置为0分割线还是没有顶到头的问题

    只需要在自定义的Cell中添加以下代码即可 override func awakeFromNib() { super.awakeFromNib() layoutMargins = UIEdgeInse ...