选择显示字体大小

c#进阶(四)

     sunwen教程之----c#进阶
  (四)
  mrfat@china.com
  大家好,我是武汉华师的sunwen.呵呵,下午好不容易有了时间出去玩了,到了归元寺.门票十元,不算贵,sunwen照了好多像,用不了多久,就可以让大家看一看了.
  
  闲话少说,让我们进入正题.这次我要向大家讲的是c#中的属性.属性是什么呢,比如说我是男的,男就是我的一人属性.我是一个大一的学生,大一也是我的一个属性.属性就是一个对象的性质.很简单吧,呵呵!下面,我给出两个例子,第一个例子出明了如何声明一个可以修改的属性,另一个例了建立了一个抽象的属性(abstract),并且说明了如何在子类中丢弃它.好,下面让我们开始吧.
  
  例子一:
  
  
  000: // properties\person.cs
  001: using system;
  002: class person
  003: {
  004: private string myname ="n/a";
  005: private int myage = 0;
  006:
  007: // 声明一个字符型的属性name
  008: public string name
  009: {
  010: get
  011: {
  012: return myname;
  013: }
  014: set
  015: {
  016: myname = value;
  017: }
  018: }
  019:
  020: // 声明一个int型的age属性
  021: public int age
  022: {
  023: get
  024: {
  025: return myage;
  026: }
  027: set
  028: {
  029: myage = value;
  030: }
  031: }
  032:
  033: public override string tostring()
  034: {
  035: return "name = " + name + ", age = " + age;
  036: }
  037:
  038: public static void main()
  039: {
  040: console.writeline("simple properties");
  041:
  042: // 建立一个person的实例
  043: person person = new person();
  044:
  045: //打印出它的属性
  046: console.writeline("person details - {0}", person);
  047:
  048: // 对属性进行一些设置
  049: person.name = "joe";
  050: person.age = 99;
  051: console.writeline("person details - {0}", person);
  052:
  053: // 增加年龄
  054: person.age += 1;
  055: console.writeline("person details - {0}", person);
  056: }
  057: }
  这个例子的输出是:
  
  simple properties
  person details - name = n/a, age = 0
  person details - name = joe, age = 99
  person details - name = joe, age = 100
  
  好了,又起床了,昨天写到这,就跑到床上睡了,呵呵.现在是五一的第二天,看看我今天能写几篇,昨天写了二篇.
  
  从上面的程序我们可以看出,一个类的属性的设置,借用了vb的概念,和java中不尽相同了.(这就是m$,tmd!)有的朋友可能很奇怪,为什么我们可以用console.writeline()来打印一个对象person呢.其实道理很简单,和在java中的一样,当调节器用一个打印方法时,这个对象自动调用它的tostring()(在java中是tostring,tmd,又差点犯错!)方法.在33行,我们可以看到有这个方法的影子,override这个关键字大概就是覆盖父类的方法吧,这是不是有点多余?我们可以看到,一个对象的属性的设置是通过一个get()和set()组合来完成的,当然,还有一个value这个东东.补充一下,你还可以控制一个属性的读/写权限,只是把get()和set()简单地去掉就可以了,比如你不要写的属性,就不要set()就可以了,如果你不要读,就不要get()吧.总得感觉,c#在这点上没有java来的灵活(完了,又要被盖痴打了!).
  
  第二个例子:
  
  这个例子说明了如何建立抽象的属性(abstract),什么是抽象的属性呢,所谓的抽象的属性呢,就是....(唉,每次废话都这么多!ft) 一个抽象类并不提供执行属性存取程序,并且,他可以在子类中被忽略.下面的例子有三个文件,你要分别编译它们才能得到结果,它们是:
  
  abstractshape.cs: shape类,包含一个area抽象属性
  shapes.cs: shape的子类
  shapetest.cs: 显示程序.
  要编译这些程序,运行:csc abstractshape.cs shapes.cs shapetest.cs就可以了.运行完之后,它会产生shapetest.exe这个可执行程序.
  
  000: // properties\abstractshape.cs
  001: using system;
  002:
  003: public abstract class shape
  004: {
  005: private string myid;
  006:
  007: public shape(string s)
  008: {
  009: id = s; // 这句调用了id属性的set构建器
  010: }
  011:
  012: public string id
  013: {
  014: get
  015: {
  016: return myid;
  017: }
  018:
  019: set
  020: {
  021: myid = value;
  022: }
  023: }
  024:
  025: public abstract double area
  026: {
  027: get;
  028: }
  029:
  030: public override string tostring()
  031: {
  032: return id + " area = " + double.format(area, "f");
  033: }
  034: }
  看这个程序, 实际上非常地简单,当这个类对的对象被建立时,初始化部分为007-010,它把建立对象的参数s给了id这个属性.然后进行了上一个例子的操作.实际上,我们可以把抽象属性与java中的接口(interface)相比,它们只提拱一个方法的名称,而不提供这个方法的内容.就像area这个抽象属性,有一个get,但是它并没有指定get方法(也许它不能称之为方法)里的内容,即要get做什么事情. 这个事情,由它的子类来做.
  
  第二个文件:在这个文件中,一个类覆盖了(override)了area属性.
  
  000: // properties\shapes.cs
  001: public class square : shape
  002: {
  003: private int myside;
  004:
  005: public square(int side, string id) : base(id)
  006: {
  007: myside = side;
  008: }
  009:
  010: public override double area
  011: {
  012: get
  013: {
  014: return myside * myside;
  015: }
  016: }
  017: }
  018:
  019: public class circle : shape
  020: {
  021: private int myradius;
  022:
  023: public circle(int radius, string id) : base(id)
  024: {
  025: myradius = radius;
  026: }
  027:
  028: public override double area
  029: {
  030: get
  031: {
  032: return myradius * myradius * system.math.pi;
  033: }
  034: }
  035: }
  036:
  037: public class rectangle : shape
  038: {
  039: private int mywidth;
  040: private int myheight;
  041:
  042: public rectangle(int width, int height, string id) : base(id)
  043: {
  044: mywidth = width;
  045: myheight = height;
  046: }
  047:
  048: public override double area
  049: {
  050: get
  051: {
  052: return mywidth * myheight;
  053: }
  054: }
  055: }
  这个例子就有些让我们一头雾水了,:是干什么的,好象是继承,相当于java中的extends吧.我想是的.我们先看一看吧.
  
  下面的第三个文件就是一个测试文件了,很简单,大家看一看.
  
  000: // properties\shapetest.cs
  001: public class testclass
  002: {
  003: public static void main()
  004: {
  005: shape[] shapes =
  006: {
  007: new square(5, "square #1"),
  008: new circle(3, "circle #1"),
  009: new rectangle( 4, 5, "rectangle #1")
  010: };
  011:
  012: system.console.writeline("shapes collection");
  013: foreach(shape s in shapes)
  014: {
  015: system.console.writeline(s);
  016: }
  017:
  018: }
  019: }
  从这个例子上看,:这个符号的确是extends的意思,就是继承.继承是什么意思,说白了,就是生孩子的意思.比如下面一句sunwenson extends sunwen,这名就是说sunwenson这个类继承了sunwen,sunwenson这个类有sunwen类的所有东西,同时可以添加和删除sunwen中的一些东西.就这么简单,但是这是现代软件发展的一项重要技术,因为它可以使软件的重用性大大提高.唉,这些就只有大三大四的人说了,我就没资格了.呵呵.
  
  这个程序的输出是:
  
  shapes collection
  square #1 area = 25.00
  circle #1 area = 28.27
  rectangle #1 area = 20.00
  完了,这一节又完了.要理解这一节,有一定的难度, 特别对那些没有java或c++编程经验的朋友.不过不要害怕,鼓起勇气学下去,一定会有所收获的. 我也要休息一下了,嘿嘿,早饭还没有吃呢
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons