C#程序或DLL的源码是一组类型的声明

类:类型是一种模板,可以把类型想象成一个用来创建数据结构的模板。模板本身并不是数据结构,但它详细说明了该模板构造的对象的特征。

命名空间:它是一种把相关的类型声明分组并命名的方法。既然程序是一组相关的类型声明,那么通常会把程序声明在创建的命名空间内。

对于可执行程序,类型声明中必须有一个包含Main方法。

下面是.Net中预定义的类型:

堆和栈

对于.Net平台来说内存中使用堆栈的概念来存放数据。
栈是一个内存数组,是一个LIFO(last-in First-out 后进先出)的数据结构。
栈中存储的数据类型:值类型数据,引用类型的地址, 程序当前的执行环境,传递给方法的参数。
栈的特征:数据只能从栈的顶端插入和删除,把数据放到栈顶称为入栈(Push),从栈顶删除数据称为出栈(POP),因此可以把栈想像成一个水杯。

栈桢

当一个方法被调用时,在栈顶分配了一块内存用于保存一定数据与方法相关的数据项,这块内存叫方法的栈桢。
栈桢中存放的数据有:返回地址(就是方法退出时在哪里继续执行)、分配内存的参数(就是方法的值参数)、方法调用相关的其他各种管理数据项。
当方法被调用时,它的整个栈桢被压入栈中,方法退出时,它的整个栈桢从栈中弹出。弹出一个栈桢有时也称为释放栈。


与栈不同,堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据,堆里的内存可以任意顺序存入和移除。但不能的删除它们。
CLR的自动GC(Garbage Collector,垃圾收集器)在判断出程序的代码将不会再访问某数据项时(该引用类型没有任何引用时),自动清除无主的堆对象。

堆中一般存放的是引用类型的实际数据而栈存放的是值类型。

值类型:只需要一段单独的内存,用于存储实际的数据。(因栈是一个内存数据,存放一些占用空间比较小的数据)

引用类型:它需要两段内存,1存储实际的数据,它总是位于堆中,2是一个引用,指向数据在堆中的存放位置。

对于一个引用类型,其实例的数据部分始终存放在堆里。
对于一个值类型对象,或引用类型数据的引用部分可以存放在堆里,也可以存放在栈里,这依赖于实际环境。

类:以程序的角度来说程序的数据和功能组织为逻辑上相关的数据项和函数的封装集合,称之为类。
类:以现实的角度来说对某些事物共同性的抽象的描述。
类是一个能存储数据并执行代码的数据结构,类的每个实例都是不同的实体。

变量:当声明定义变量,其内部完成了两件事:1.给变量命名,并为它关联一种类型。2让编译器为它分配一块内存。
常量:(Const)通常是一个预定义简单类型或期组成的表达式。它还可以是Null引用,但它不能是某对象的引用,因为对象的引用是在运行时决定的。常量中是不能重新赋值的。

参数:
形参:是声明在方法的参数列表中而不是方法体中的本地变量。
实参:当代码调用一个方法时,形参的值必须在方法的代码开始执行之前初,初始化。
值参数:(传值)数据通过复制实参的值到形参的方式传递到方法。
引用参数:(传地址)使用Ref修饰符,实参必须是变量,在用作实参前必须被赋值。
输出参数: 使用out修饰符,用于方法体内把数据传出到调用代码,它们非常类似引用参数。每个输出参数在方法读取、返回之前必须被赋值,这就意味着参数的初始值是无关的。
参数数组:允许零个或多个实参对应一个特殊的形参,在一个参数列表中只能有一个参数数组,并且它必须是列表中最后一个。使用(Params)修饰符。

如果数组参数是值类型,那么值被复制,实参不受方法内部的影响。

如果数组参数是引用类型,那么引用被复制,实参引用的对象受到方法内部的影响。

02-C#(基础)基本的定义和说明的更多相关文章

  1. 数据分析02 /pandas基础

    数据分析02 /pandas基础 目录 数据分析02 /pandas基础 1. pandas简介 2. Series 3. DataFrame 4. 总结: 1. pandas简介 numpy能够帮助 ...

  2. linux基础之LSB定义的常用目录详解

    Linux基础之LSB定义的基本目录详解 1.LSB中FHS(Filesystem Hierarchy Standard)定义的一些文件 /boot:主要是存放引导文件的目录,比如内核文件(vmlin ...

  3. Java基础-变量的定义以及作用域详解

    Java基础-变量的定义以及作用域详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字面量 常量(字面量)表示不能改变的数值(程序中直接出现的值).字面量有时也称为直接量,包 ...

  4. php从入门到放弃系列-02.php基础语法

    php从入门到放弃系列-02.php基础语法 一.学习语法,从hello world开始 PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器&qu ...

  5. 《Java基础——数组的定义与使用》

    Java基础--数组的定义与使用       一. 一维数组: 格式一: 数组类型 数组变量[]=new 数据类型[长度]; //需要后续赋值,且后续赋值时只能为单个元素赋值. 或 数组类型 数组变量 ...

  6. T——SQL基础语句(定义变量,赋值,取值,分支,循环,存储过程)

    T--SQL基础语句 1.定义变量: declare @变量名 数据类型 ; declare @a int ; declare @b  nvarchar(10) ; 2.赋值: 法1:set @变量名 ...

  7. 2017-2-17,c#基础,输入输出,定义变量,变量赋值,int.Parse的基础理解,在本的初学者也能看懂(未完待续)

    计算机是死板的固定的,人是活跃的开放的,初学c#第一天给我的感觉就是:用人活跃开放式的思维去与呆萌的计算机沟通,摸清脾气,有利于双方深入合作,这也是今晚的教训,细心,仔细,大胆 c#基础 1.Hell ...

  8. 麻省理工18年春软件构造课程阅读02“Java基础”

    本文内容来自MIT_6.031_sp18: Software Construction课程的Readings部分,采用CC BY-SA 4.0协议. 由于我们学校(哈工大)大二软件构造课程的大部分素材 ...

  9. C#基础 常用语&数据类型定义&类型转换

    int temp = Console.Read(); Console.WriteLine(temp); Console.Read(); Console.Write("  ");直接 ...

  10. go基础语法-变量定义

    1.基础定义 变量类型在变量名后 var a int var s string 2.定义并赋值 var a,b int = 1,2 var s string="abc" 3.类型推 ...

随机推荐

  1. linux mail命令详解

    用程序发送邮件有3种方式,分别是: 1.模拟http请求邮件服务商网页实现邮件的发送 2.如果邮件服务商开通了smtp服务,那么可以通过smtp协议通过邮件代理服务商发送邮件 3.自己部署邮件服务器, ...

  2. require.js学习笔记

    使用require.js的好处? 1 有效的防止命名冲突(可以将变量封装在模块内,通过暴露出的接口解决命名冲突) 2 解决不同JS文件中的依赖 3 可以让我们的代码以模块化的方式组织 官方网站http ...

  3. SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除临时表(drop table #tableName)吗?

    本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时 ...

  4. PAT 1046

    1046. Shortest Distance (20) The task is really simple: given N exits on a highway which forms a sim ...

  5. c++:自己动手实现线程安全的c++单例类

    前段时间使用c++做项目开发,需要根据根据配置文件路径加载全局配置文件,并对外提供唯一访问点.面对这样一个需求,自然的就想到了使用单例模式来创建一个单例配置对象,供外部调用.一开始想使用boost中自 ...

  6. ArrayList和List主要区别 就是ArrayList类型不安全。

    什么是不安全? 1:List大家都知道初始化的时候需要定义其类型,例如 List<int> listTest = new List<int>():而ArrayList,例如:A ...

  7. 透视I/O多路复用

    透视I/O多路复用 我写的不是select这些函数的教学,需要了解的请自行Google或者去man,这些是帮助我理解函数的封装之下的道理. 需要回答的问题 I/O准备好了指什么?什么叫I/O已经可读/ ...

  8. iOS数据本地化

    本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...

  9. php超时任务处理

    首先,不知道fastcgi_finish_request是啥的点这里.  一直知道php有个fastcgi_finish_request可以用来针对web应用处理耗时任务,但我一直以为直接fastcg ...

  10. Angular2.js——表单(下)

    这部分是接表单上部分的内容,主要内容有: 1.添加自定义的CSS来提供视觉反馈: 2.显示和隐藏有效性验证的错误信息: 3.使用ngSubmit处理表单提交: 4.禁用表单提交按钮. 添加自定义的CS ...