C# 語言中的物件封裝 (Encapsulation)

基礎篇

C# 簡介

開發環境

變數與運算

流程控制

陣列

函數

物件

例外處理

函式庫篇

檔案處理

資料結構

正規表達式

Thread

應用篇

視窗程式

媒體影音

網路程式

遊戲程式

手機程式

資料庫

雲端運算

特殊功能

委派

擴展方法

序列化

LinQ

WPF

網路資源

教學影片

投影片

教學文章

軟體下載

考題解答

101習題

習題一:向量物件
習題二:矩陣物件

在傳統的結構化程式設計 (像是 C, Fortran, Pascal) 當中,我們用函數來處理資料,但是函數與資料是完全區隔開來的兩個世界。然而,在物件導向當中,函數與資料被合為一體,形成一種稱為物件的結構,我們稱這種將函數與資料放在一起的特性為「封裝」。

以下我們將以矩形物件為範例,說明 C# 當中的封裝語法,以及物件導向中的封裝概念。

範例一:封裝 — 將函數與資料裝入物件當中

using System;

class Rectangle
{
    double width, height;

    double area()
    {
        return width * height;
    }

    public static void Main(string[] args)
    {
        Rectangle r = new Rectangle();
        r.width = 5.0;
        r.height = 8.0;
        Console.WriteLine("r.area() = " + r.area());
    }
}

執行結果

r.area() = 40

修改進化版

由於上述物件與主程式混在一起,可能容易造成誤解,因此我們將主程式獨立出來,並且新增了一個 r2 的矩形物件,此時程式如下所示。

using System;

class Rectangle
{
    public double width, height;

    public double area()
    {
        return width * height;
    }
}

class Test
{
    public static void Main(string[] args)
    {
        Rectangle r = new Rectangle();
        r.width = 5.0;
        r.height = 8.0;
        Console.WriteLine("r.area() = " + r.area());

        Rectangle r2 = new Rectangle();
        r2.width = 7.0;
        r2.height = 4.0;
        Console.WriteLine("r2.area() = " + r2.area());
    }
}

執行結果:

r.area() = 40
r2.area() = 28

範例二:加上建構函數

using System;

class Rectangle
{
    double width, height;

    public Rectangle(double w, double h)
    {
        width = w;
        height = h;
    }

    public double area()
    {
        return width * height;
    }

    public static void Main(string[] args)
    {
        Rectangle r = new Rectangle(5.0, 8.0);
        Console.WriteLine("r.area() = " + r.area());
    }
}

執行結果

r.area() = 40

範例二:加上建構函數 — 同時有 0 個與兩個引數

using System;

class Rectangle
{
    public double width, height;

    public Rectangle() { }

    public Rectangle(double w, double h)
    {
        width = w;
        height = h;
    }

    public double area()
    {
        return width * height;
    }
}

class Test
{
    public static void Main(string[] args)
    {
        Rectangle r = new Rectangle(5.0, 8.0);
        Console.WriteLine("r.area() = " + r.area());

        Rectangle r2 = new Rectangle();
        r2.width = 7.0;
        r2.height = 4.0;
        Console.WriteLine("r2.area() = " + r2.area());
    }
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License