|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
我们继承来谈一谈类 与其他面向对象的编程语言不同,.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 返回类别: 教程 上一教程: 从ASP迁移至ASP+--进入DataSet 下一教程: ASP中DLL的调试环境配置全攻略 您可以阅读与".Net边学边讲(二)"相关的教程: · .Net边学边讲(一) · .Net边学边讲(三) · 亲密接触ASP.Net(4) · ASP.NET:访问Excel 电子表格 · ADO连接数据库字符串大全(VP,EXCEL,文本,SYBASE,.NET等) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |