• [编程开发]sunwen教程之----c#进阶(七)

  • 网网网络  阅读[0]次  评论[0]条  发布时间:2009-10-17  发布人:网网网络

文章摘要:sunwen教程之----c#进阶(七).

  大家好,我是武汉华师的sunwen.现在是五月四日中午,昨天一天由于在搞自己的技术网站,叫"鬼子山技术站",(嘿嘿,有点恐怖吧!)所以没有写。等这个站建好后,还要大家多多捧场啊,我们这个站主要是面向教育网的,因为服务器就在教育网内。

  好了,言归正传。我要说的是c#中的结构(struct),注意,我在这里说的结构不是指的c#的语言结构。这里所说的是一种与类(class)相对的东西,下面我就与类相对比,来说一说这个struct.

  下面的这个例子讲述了如何建立一个具有属性,方法和一个字段的结构。并讲述如何使用他。

  000: // structs\struct1.cs

  001: using system;

  002: struct simplestruct

  003: {

  004: private int xval;

  005: public int x

  006: {

  007: get {

  008: return xval;

  009: }

  010: set {

  011: if (value 〈 100)

  012: xval = value;

  013: }

  014: }

  015: public void displayx()

  016: {

  017: console.writeline("the stored value is: {0}", xval);

  018: }

  019: }

  020:

  021: class testclass

  022: {

  023: public static void main()

  024: {

  025: simplestruct ss = new simplestruct();

  026: ss.x = 5;

  027: ss.displayx();

  028: }

  029: }

  这个例子的输出是:

  the stored value is: 5

  从上面的例子中我们可以看到结构和类似乎是一样的。的确,如果你用类去重亲写这个程序,结果是一样的。但是,很明显,两个一样的东西是不可能一起出现的。 结构(struct)是值(value)型的,而类是参考型的。这样,你就可以用结构建立像内建类型那样的对象了。

  还有就是如果你用一个new关键字建立一个类的实例的时候,它是以堆(heap)来分配的,而用new来建立一个结构的的实例的时候,它是以栈(stack)来分配。这会给我们提高很多性能(m$说的).好了,让我们再来看下面的例子吧:

  000: // structs\struct2.cs

  001: using system;

  002:

  003: class theclass

  004: {

  005: public int x;

  006: }

  007:

  008: struct thestruct

  009: {

  010: public int x;

  011: }

  012:

  013: class testclass

  014: {

  015: public static void structtaker(thestruct s)

  016: {

  017: s.x = 5;

  018: }

  019: public static void classtaker(theclass c)

  020: {

  021: c.x = 5;

  022: }

  023: public static void main()

  024: {

  025: thestruct a = new thestruct();

  026: theclass b = new theclass();

  027: a.x = 1;

  028: b.x = 1;

  029: structtaker(a);

  030: classtaker(b);

  031: console.writeline("a.x = {0}", a.x);

  032: console.writeline("b.x = {0}", b.x);

  033: }

  034: }

  这个例子的输出是:

  a.x = 1b.x = 5

  从这个例子例子可以看出,当一个结构被传递到一个方法时,被传递的只不过是一个副本,而一个类被传递时,被传递的是一个参考。所以a.x=输出的是1,不变,而b.x却变了。

  还有的区别就是结构可以不用new来实例化,而类却要。如果你不用new来实例化一个结构,那么所有的字段将仍然处于未分配状态,直到所有的字段被初始化。和类一样,结构可以执行接口。更重要的是,结构没有继承性,一个结构不能从别的类继承,也不能是别的类的基类。

  例三:

  interface iimage

  {

  void paint();

  }

  struct picture : iimage

  {

  public void paint()

  {

  // painting code goes here

  }

  private int x, y, z; // other struct members

  }

  好了,关于结构我就讲到这了,以后还会讲到的。
顶一下
(1000)
50%
踩一下
(1000)
50%
【已有0位网友发表了看法,点击查看。】 复制本页共享msn或qq等好友
  • 发表人:      可输入字数[200]字
  • 验证码:验证码,看不清楚?请点击刷新验证码  请输入计算结果
  • 法律声明:网友评论仅供网友表达个人看法,并不表明网网网络同意其观点或证实其描述
48小时评论排行
    友情链接