ASP.NET.2.0.in.C.Sharp.2005.From.Novice.to.Professional的读书笔记[6]

Value Types and Reference Types

简单得数据类型属于Value Types,类属于Reference Types.在许多地方两者得区别不是很大,在应用上也极其相近,但是在三种情况下,需要注意这两种类型得不同.in assignment operations, in comparison operations, and when passing parameters,也就是指定操作,比较操作,和参数得传递.

Assignment Operations

integerA = integerB;//将后者得值赋给前者,他们的值相同了,他们在内存中得存放是两个不同得内存单元.

objectA = objectB;//他们两者都指向了同一个实例,也就是说一个实例有两个名称,是一个对象但可以通过两种途径访问,通过objectA修改对象,再从objectB访问的时候,发现对象是被修改过的.

但又时候,你也许需要象integerA = integerB一样的方式来赋值对象,所以.net提供了一个clone()函数,他能心建一个对象,而不是一个对象公用两个名称.

Equality Testing

if (integerA == integerB){}//你比较的是两个的实际内容.

if(objectA == objectB){}//比较的是两个是不是都指向同一个对象,而并不是比较两者的内容.

Passing Parameters by Reference and by Value

有三种传递参数的方法.他们是pass-by-value,pass-by-reference,为了使我们更容易理解这里.例子如下:

private void ProcessNumber(ref int number)//pass-by-reference

{number * =2;}

int num = 10;

ProcessNumber(ref num);

用这种方法需要注意的是,如果函数定义的是以ref传递,那么调用的时候也必须以ref调用才行,在这里num在内存中的值被修改成20了.但如果函数的定义与调用都没有ref的时候,num的值是不会被改变的,因为,他是将10这个数传递给函数,而改变的不是num,而是ProcessNumber函数的参数number.

只有当你在使用数据类型需要以pass-by-reference形式传递参数的时候,你才需要用到ref,而类是不需要用到的,这是因为他本身就是以pass-by-reference的形式传递参数.而且只能以pass-by-reference的形式传递参数.

还有out关键字的输出,可以在英文原版书的110面找到.

Reviewing .NET Types

回顾.NET类型,又以下几种,他们是:Classes,Structures,Enumerations,Delegates,Interfaces,书中的英文很好理解,了解一下.

 Understanding Namespaces and Assemblies

每一个代码片段都存在于一个.net类型中,同时,每个.NET类型都存在于一个命名空间中,图3-3指示出了这一点.

命名空间将所有不同类型都组织在了类库中,如果没有命名空间,这些类型会变得非常的散乱而且不容易记忆,而且令人厌烦的长,System是所有类的的基类.

Using Namespaces

可以自己定义命名空间,在例子中,Product类在MyCompany.MyApp的命名空间中,在此命名空间中代码可以用名字Product直接访问类,在此命名空间之外的就需要以全名MyCompany.MyApp.Product来访问.

如此一来,用户就能使用第三方提供的组件,而不用担心名字的重复或者混淆的问题,引入命名空间之后,所有的名字都是唯一的。命名空间没有任何访问的关键字(如public之类的关键子),但他是默认以public来访问,他有可嵌套定义的特性.如

namespace  MyCompany.MyApp//此命名首字符必须大写,必须遵循Pascal命名规则

{

          public class Product{//代码在此处}

}

Importing Namespaces

看了上面的例子,我们会发现,当有使用Product的类非用全名MyCompany.MyApp.Product来定义一个对象.有没有方法使这简单呢?答案是,YES.但,怎么使用呢?如下

需要在你的代码页面的第一行写上 using MyCompany.MyApp,这样你就可以在你的代码页直接使用Product类,而不用使用他的全名MyCompany.MyApp.Product来定义一个对象了。

Assemblies

 实际上所有的.net类都包含于assemblies,assemblies应该称为程序集,assemblies是一些包含已编译代码的物理物件,

assemblies与namespaces没有严格的关系,一个assembly能够包含许多的命名空间,相反地多个assemblies文件能够包含相同命名空间中的类.实际上,assemblies是建立代码的物理包,而namespaces则是类的逻辑组织.

.NET类包含于一系列的assemblies文件中,例如,基类System就来源于mscorlib.dll assembly.许多ASP.NET类能够在System.Web.dll assembly中找到.除此之外,你也许需要使用第三方提供的assembly文件.

通常,assemblies和namespaces有着相同的名字,例如,System.Web与System.Web.dll文件,但这并不是必然的,只是为了方便.

当编译一个程序的时候,你需要告诉语言编译器,什么assemblies文件是你需要用到的,在默认情况下,会有很多的.NET assemblies文件来支持编译器的工作.如果你想使用额外的assemblies文件,你需要在configuration文件中定义他们,

今天的任务总算完成,我想越到后面会越慢,因为我发现自己越来越难以理解,一半是英文的关系,而另一半则是技术上的原因.朋友们,如果你也正在看这本书,让我们多多讨论一下吧.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值