程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Crest簡單對象的設計

Crest簡單對象的設計

編輯:C#入門知識

在我們開始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#的擴展函數,就更明白這一點。

簡單對象的使用

設計好了簡單對象,我們當然要用一下了,先看

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved