当前位置:编程学习 > C#/ASP.NET >>

Crest简单对象的设计

在我们开始Crest的设计之前,我们先看一段参考代码

using System;

using System.Collections.Generic;

 

public abstract class Bird{

protected String name;

public abstract String tweet();

public String getName(){return name;}

}

 

public class Cock : Bird{

public override String tweet(){return "woooooo";}

public virtual String walk(){return "cock walk";}

public void setName(String newName){ name = newName;}

}

 

 

public class MainClass

{

    public static void Main()

    {

        Bird bird = new Cock();

        Cock cock = new Cock();

        System.Console.WriteLine(bird.tweet());

    }

}

这是一段纯正的面向对象的代码,我们的话题就会沿着这一段代码展开。首先我们从设计Crest以支持最简单的对象。

简单对象

因为C语言的本身限制,所以我们要模拟一个类的定义只能使用struct。最简单的类当然就是空类了。我们的C代码如下:

struct CEmptyObject

{

}

然后我们要让我们的CEmptyObject类加入成员变量,也很简单:

struct CEmptyObject

{

    int salary;

};

再加入一个成员函数吧。我想加入一个getSalary,但是问题来了,怎么加呢?如果这样写:

int getSalary(){return salary;}

似乎是对的,但是C编译器报告salary找不到,如果把这行代码放到struct CEmptyObject中,同样也是编译错误[BCC32 Error] raw.c(143): E2200 Functions may not be part of a struct or union。实际上,大部分OO语言的实现都是类似的,我们也就不卖关子了,照搬如下:

    int getSalary(struct CEmptyObject * _this)

    {

        return _this->salary;

    }

所有我们代码中写的 xxx.getSalary() 类似的代码,都实际转化为getSalary(xxx)形式,如果大家熟悉C#的扩展函数,就更明白这一点。

简单对象的使用

设计好了简单对象,我们当然要用一下了,先看

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,