.Net边学边讲(二)

2016-01-29 19:17 2 1 收藏

.Net边学边讲(二),.Net边学边讲(二)

【 tulaoshi.com - ASP 】

  我们继续来谈一谈类
与其他面向对象的编程语言不同,.Net中类有四个基本成员,data members(fields), function members(methods), properties, events。其他编程语言只有前两项。这里需注意,data members(fields)永远不要声明成public,因为这样会使使用者无需知道你的类就可以改变你的数据。
public class test{
private int i;
}
这里i 就是一个data members(fields),需要提及一点,properties提供了方便、安全的数据访问封装。下面来谈谈function members(methods),他有两种存在方式,instance和static。Instance隐含的接受了指向他所在的对象的指针,在C#中你可以用对象名或this得到。如:SomeObject.Method(), 或this.Method()。静态的(Static)Method不能接收到this指针。因此他们不能直接访问类里的任何实例化数据。他的调用方式是SomeClassName.StaticMethod()。他无需例示。function members(methods)默认是private的,即只能在声明他们的类中访问,我们需要声明他们为public以便可以在任何类中访问。function members(methods)可以被重载,也就是说你可以创建多个就有相同名字的方法,比如说test(int i), test(double i), test(), test(string i, bool b).....。.Net编译器会依据你传递的参数决定你在调用哪个方法。当然还有一些其它的修饰符如extern,他的用途是如果你想在.Net Framework中声明你的方法而在.Net Framework之外实现你的方法,比如说在C# 中声明你的方法而在windows本地dll中实现你的方法,你就要在C#中这样声明,public extern yourmethod(){}
接下来我们要谈谈Constructors和Finalize,每个类都至少有一个Constructor的方法,如果你没有提供,C#将自动为你生成一个没有任何参数的Constructor。Constructor是一个与你的类的名字相同且没有任何返回值的的方法。每个Constructor都会调用一个你基类的Constructor(如果没有显性的基类,就调用对象的),这个调用会在你的Constructor主体执行之前调用,这样,你就知道你的基类有没有正确的初始化了。Constructor只在每个对象被创建时调用一次,它的作用是初始化对象的实例,以便于调用。Destructors已不再需要,因为C#会自动提供一个清理对象的方法(叫Finalize)。垃圾自动清理,这也是C#的区别于其他编程语言的特性之一。接下来,我们该谈谈属性了。首先为什么要用属性?来看一个例子,如果你有一个类Person,有一个data members(fields)叫Age 是Int32型的被声明成public,(前面我们讲过不能声明成public,这里就是举例说明为什么不能):
Person Jim = new Person(); // create object; pointed to by Jim
Jim.Age = 23;
Int32 JimsAge = Jim.Age;
Jim.Age = -5; // invalid, but unchecked if you use a field
这段代码会造成两个问题
1.你的用户知道了内部数据的细节,他们可能会做一些你不希望发生的操作
2.你的用户可能会更改数据为一个不合法的值,如将Age设为零或负数
现在大家可以知道属性的优势了,相对应予上面提的
1.用户不会知道你的内部数据结构
2.属性方法会保护数据
下面的例程显示了属性的优越。
public class Person
{
Int32 age; // 注意默认是private
public Person(Int32 age) { // constructor
this.age = age; // this消除歧义!
}
public Int32 Age { // property
get {
return age;
}
set { // validating value
if (value 0 && value < 150) {
age = value;
}
else { // throw exception if invalid value
throw new ArgumentException("Age must be between 1
and 150");
}
}
}
}
这段程序有几个值的关注的地方
1.在constructor中,我们定义了一个参数也叫age,这会与private age产生歧义。我们用this来消除歧义。
2.get方法用于读取属性set方法用于存取属性 。关键字value代表属性被设置的值
3.在set方法中我们检查了value的值,并在数据不合法时抛出了异常
有点打累了。。。:)
下次我们谈谈event


 

来源:http://www.tulaoshi.com/n/20160129/1508932.html

延伸阅读
标签: 育儿知识
宝宝怎样才能边玩边学 宝宝们怎样才能学得最好?不需要特殊的玩具,录像或抽认卡片。常常是宝宝一坐下就开始玩儿。玩耍是小孩儿们的工作。他们急于想知晓世界是怎么运转的,他们使用身边所有的“工具”,从玩耍中去了解。 通过玩耍,孩子们学习交流和你一言我一语地相互交谈,当他们看见与爸爸妈妈一块儿玩儿时的无穷乐趣,他们会感受到自我...
.NET 技术 你可能已经阅读了一些关于 .NET 是什么和由什么东西组成的文章。.NET 允许我们在服务的层次上而不是在发布的层次上来共享信息并交互。Microsoft 的支持 .NET 的产品和许多来自第三方的组件、内容和功能拥有 .NET 的内部结构。但自然地会提出一个问题:“是什么使 .NET 能够工作?” 这些都从 XML 开始。 ...
名称空间与程序集名称之间有什么区别? 名称空间是类型的一种逻辑命名方案,其中简单类型名称(如 MyType)前面带有用点分隔的层次结构名称。这样的命名方案完全在开发人员的控制之下。例如,键入 MyCompany.FileAccess.A 和 MyCompany.FileAccess.B 在逻辑上将会具有与文件访问相关的功能。.NET 框架使用一种层次结构命名方案,用于将类型按相...
4.配置管理 Snake.Net 提供了一个高效的配置管理类Eastasp.Framework.Configuration.Settings来处理配置信息,与.Net的配置文件格式略有不同,Snake.Net提供了一种更简洁的机制来处理配置信息。见图1.2我们可以发现Snake.Net中的配置文件就两个节点类型session和key,对比.Net的config文件要简洁许多。对于一个对象Object(本文里所指的对象...
表一、运算符与特殊字符  运算符 描述 /选择子元素,返回左侧元素的直接子元素;如果"/"位于最左侧表示选择根结点的直接子元素//递归下降,不论深度,搜索指定的元素;如果位于最左侧表示从根结点出发递归下降搜索指定元素 . 表示当前元素*通配符,选择任意元素,不考虑名字@ 取得属性值,作为属性名的前缀 @* 通配符,选择任意属性...

经验教程

431

收藏

39
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部